Repository navigation
fix(om): honor background posts requested while acknowledgement is pending - #291
Merged
Merged
Conversation
…nding Background posts and matching outbox reminders received during delivery or acknowledgement now request one immediate follow-up drain. Newly committed messages no longer wait for RetryDelay after the current batch completes. Repeated requests coalesce, and failures keep their configured retry cadence unless a caller explicitly requests another drain of the pending snapshot. Queued acknowledgement callbacks already consumed by a foreground post no longer overwrite its immediate follow-up schedule. Dispatch and acknowledgement remain separate turns, and pending batches are not delivered twice. Refs #290
egil
force-pushed
the
egil/om-290-background-drain
branch
from
October 10, 2026 17:34
9ebecc3 to
7cca9ce
Compare
egil
marked this pull request as ready for review
October 10, 2026 17:39
Code reviewNo issues found. Checked for bugs and CLAUDE.md compliance. |
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Exceptional dispatch and acknowledgement paths still overwrite explicit follow-up requests with the retry delay.
1 open finding
What changed in this PR
Updates outbox draining so background requests made during delivery or acknowledgement trigger a prompt follow-up dispatch.
Changes:
- Tracks coalesced follow-up drain requests.
- Preserves timers during stale acknowledgements.
- Adds hosted regression coverage and timer controls.
| File | Description |
|---|---|
OutboxProcessor.cs |
Tracks and schedules requested follow-up drains. |
OutboxProcessorDrainRequestTests.cs |
Covers delivery, acknowledgement, retries, and foreground takeover. |
OutboxDrainRequestGrain.cs |
Provides the regression-test grain and synchronization gates. |
GatedOutboxTimerRegistry.cs |
Adds controllable Orleans timer decoration. |
MessagingTestClusterFixture.cs |
Installs the timer decorator. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Background posts and matching reminders received while dispatch or acknowledgement owns the outbox now preserve one follow-up request. Newly committed work dispatches promptly after acknowledgement instead of waiting for
RetryDelay. Repeated requests coalesce; an explicit request can retry the whole pending snapshot once, while ordinary failures retain retry cadence.Queued acknowledgement callbacks whose batch was already consumed by a foreground post now leave the follow-up timer alone. Public interfaces, storage formats, reminder policies, and the separate acknowledgement turn are unchanged.
Evidence
7cca9ce5: Standards: no actionable findings. Spec: no findings. All GitHub checks pass. An existing Journaling fault-injection test failed on the first CI run and passed on rerun; the outbox suite passed both runs.v1.1.3plus this fix. All 988 tests pass at patch commit2c6ab7f4; its Release build has zero warnings/errors and all four packages validate. The core DLL extracted fromEgil.Orleans.Messaging.1.1.4.nupkgalso passes all seven new hosted regressions.Merge Danger
Door: two-way
The change can be reverted without a storage migration.
Blast Radius: Outbox
Explicit requests during a failed batch permit one prompt retry of the pending snapshot. Without a further request, remaining failures wait for the configured retry delay.
Exceptional exits (processing timeout, cancellation, or throwing acknowledgement callback) preserve recovery at
RetryDelay, as specified in the approved plan. They retain the request flag until the next retry takes a fresh snapshot; they do not schedule an immediate exceptional retry.Refs #290.
Release handoff
The reviewed fix is backported to egil/om-290-1.1-patch, commit
2c6ab7f453017f13f1ae5cf5c96db2b51578c6eb. The localrelease/egil-orleans-messaging/v1.1branch points at that commit. Its only difference from this PR's head is the stable version file.Maintainer merge and publication remain pending. Publishing that commit to
release/egil-orleans-messaging/v1.1invokes the existing build/test/package-validation/release workflow and publishes stable 1.1.4 packages (Journaling remains 1.1.4-preview). The publishing branch has not been pushed. After publication, verify the NuGet package's source commit and regression behavior, then record the published version in #290.