Skip to content

docs(batching): settlement model + durability requirement (GH-3289 Phase 0)#3299

Merged
jeremydmiller merged 1 commit into
mainfrom
docs-batching-settlement-3289
Jul 5, 2026
Merged

docs(batching): settlement model + durability requirement (GH-3289 Phase 0)#3299
jeremydmiller merged 1 commit into
mainfrom
docs-batching-settlement-3289

Conversation

@jeremydmiller

Copy link
Copy Markdown
Member

Phase 0 of the #3289 batch-processing plan. Documentation only.

What & why

The single most surprising thing in the #3289 proposal is that batched member messages are settled at different times depending on endpoint mode, and only the durable inbox defers settlement until the batch actually succeeds. Today that is undocumented, so users reasonably (but wrongly) assume peek-lock semantics carry through batching. This PR closes that gap.

Adds a "Durability and message settlement" section to docs/guide/handlers/batching.md:

  • Settlement table — durable defers settlement until the batch succeeds (loss-proof); inline/buffered settle members before the batch runs, so a crash mid-accumulation loses them.
  • States prominently that a durable/persistent listener is required for guaranteed delivery of batched processing.
  • Explains the mechanics (Envelope.InBatch + DurableReceiver.CompleteAsync early-return at src/Wolverine/Runtime/WorkerQueues/DurableReceiver.cs:196) and notes that deferred inline settlement is deliberately not offered (it would need transport-specific lock renewal; the durable inbox already solves loss uniformly).
  • Lock-window caveat (covers the deferred item 4 as prose): on lock-based transports the accumulation window + processing time must fit inside the broker lock/visibility duration, or messages are redelivered while still buffered — silent duplicate processing and a climbing DeliveryCount.

Scope

No code changes. Subsequent phases (IBatchContext, CoalesceBy, the collision diagnostic, and the partial-failure isolation family) will land as separate PRs per the plan.

🤖 Generated with Claude Code

…r batched processing (GH-3289)

Phase 0 of the #3289 batch-processing plan. Adds a "Durability and message
settlement" section to the batching guide making explicit that a durable
(persistent) listener is required for guaranteed delivery of batched
processing.

- Settlement table: durable defers settlement until the batch succeeds
  (loss-proof); inline/buffered settle members before the batch runs (lost on
  a crash during accumulation).
- Explains the mechanics (Envelope.InBatch + DurableReceiver.CompleteAsync
  early-return) and why deferred inline settlement is deliberately not offered.
- Documents the lock-window caveat as prose (covers deferred item 4): on
  lock-based transports the accumulation window + processing time must fit
  inside the broker lock/visibility duration or messages are redelivered while
  still buffered.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jeremydmiller
jeremydmiller merged commit 834663b into main Jul 5, 2026
25 checks passed
This was referenced Jul 9, 2026
This was referenced Jul 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant