pub async fn read_strongly_consistent_and_apply_effects<T, F>(
op: OperationVc<T>,
get_effects: F,
) -> Result<ReadRef<T>>Expand description
Strongly-consistent read of op, then apply its effects, retrying the whole read+apply on
EffectsError::Retry.
get_effects extracts the Effects from the read value (for a wrapper struct this is
|v| &v.effects; for an OperationVc<Effects> it is |e| e).
On EffectsError::Retry the producing operation has already been invalidated by
Effects::apply, so the next
read_strongly_consistent re-runs the producer and
yields a fresh Effects whose capture() re-materializes content. Retries are bounded to
avoid livelock when two producers perpetually stomp the same key; after the first retry a
warning is logged on each subsequent attempt, and on exhaustion the last Retry surfaces as an
error.
This is one of two public entry points for applying effects (see also
[read_strongly_consistent_and_apply_effects_with]) — Effects::apply is private so the
retry contract cannot be bypassed.