Skip to content

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:

Leader → Lagging Follower: complete(X)   (no prior tentative)
Lagging Follower: apply X

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 tentative as usual.
  • If the follower is lagging behind a durable boundary → send complete directly for everything up to that boundary, then resume normal tentative flow.

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

Last updated · 347 distilled / 1,201 read