PATTERN Cited by 1 source
Skip completion for late followers¶
Intent¶
Once a request has reached the durable stage of the two-phase tentative-then-complete commit path, save one round-trip per lagging follower by sending the complete message directly — skipping the intermediate tentative step that would otherwise be wasted.
Shape¶
Normal path for each follower:
Leader → Follower: tentative(X)
Follower → Leader: ack
Leader → Follower: complete(X)
Follower: apply X
After durability is met (enough other followers already ack'd), any follower that has not yet received the tentative can be fast-forwarded:
Two round-trips collapse to one.
Canonical formulation¶
Sugu Sougoumarane, consensus-algorithms-at-scale part 6: "Once a request becomes durable, the leader is free to transmit that request as complete to followers that have not yet received the message as a single step."
(Source: sources/2026-04-21-planetscale-consensus-algorithms-at-scale-part-6-completing-requests)
Why it is safe¶
The tentative marker exists to support cancellation — the affordance to delete a non-durable request cleanly. Once a request is durable, it can no longer be cancelled (completion and cancellation are mutually exclusive). Therefore the tentative state buys nothing for lagging followers arriving after durability — they can jump straight to applied.
The safety argument is a direct consequence of the concepts/durable-request invariant: "We can trust that a durable request will never be canceled."
When it matters¶
- Slow follower during normal operation — saves one round-trip every write.
- New follower joining after the write was durable — catch-up replication can send pre-durable writes as complete in a single message.
- Follower recovering from brief unavailability — rejoins to find the leader has already declared prior writes durable; gets them as complete directly.
Implementation note¶
The leader must track, per follower, the highest durable request the follower has seen. When sending subsequent work:
- If the follower is current (up to the latest tentative) → send
tentativeas usual. - If the follower is lagging behind a durable boundary → send
completedirectly for everything up to that boundary, then resume normaltentativeflow.
This is a book-keeping cost on the leader, not a protocol-invariant change.
Not applicable when¶
- The write is not yet durable. Skipping tentative before durability would leave followers with applied writes that might have to be cancelled — breaking the mutual-exclusion invariant.
- The system requires tentative state for observability / audit reasons, even after durability.
Seen in¶
- sources/2026-04-21-planetscale-consensus-algorithms-at-scale-part-6-completing-requests — Sugu names this optimisation explicitly in his canonical presentation of the two-phase commit path.
Related¶
- patterns/two-phase-tentative-then-complete — the base pattern this optimises.
- concepts/tentative-request — the marker this skips for lagging followers.
- concepts/durable-request — the invariant that makes the skip safe.
- concepts/two-phase-completion-protocol — the protocol this pattern lives inside.