Add .MessagesImplementing<T>() to the docs about message routing - #594
Merged
jeremydmiller merged 1 commit intoOct 17, 2023
Conversation
Member
|
Thanks Raphael! |
jeremydmiller
added a commit
that referenced
this pull request
Jul 31, 2026
Picks up the blue/green side-effect gate fixes (#594): the warm-up ceiling is now DaemonSettings.SideEffectGateTimeout rather than a hardcoded 5 minutes, and a warm-up that exceeds it re-reads persisted progression before being called a failure -- a shard whose replay had actually reached the prior version's mark used to fail its start repeatedly on the timeout alone. Also carries the BatchingChannel trailing-batch double-delivery fix (#595), which affects Wolverine's batched senders: a shutdown with a partial batch pending could deliver those items twice. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Jul 31, 2026
erdtsieck
pushed a commit
to erdtsieck/wolverine
that referenced
this pull request
Aug 3, 2026
…xGH-3779) Every defect in the JasperFxGH-3753 chain -- JasperFxGH-3748, JasperFxGH-3749, JasperFxGH-3750, JasperFx#594, JasperFx#598 -- takes a SLOW AGENT START as its precondition, and `FakeAgent.StartAsync` returned `Task.CompletedTask`, which is precisely the assumption the whole chain violates. SlowTests/Agents already reproduces this against real hosts and real delays, and those three tests are the thorough version. They also run in NO CI workflow and take minutes apiece, so nothing guards the leader's assignment logic on a normal commit. This adds the fast tier underneath them. Harness seams, as the issue asks for: - `FakeAgent` takes a settable `StartDelay`/`StopDelay` and counts entries into `StartAsync`, so a start that is merely slow can be told apart from one the leader has re-driven. - `FakeAgentFamily` takes an agent count (the twelve hard-coded `Names` are fine for asserting the shape of a distribution, not for the ~6,500-agent shape that actually breaks) and a `StartDelayPolicy`, so a long TAIL can be simulated rather than a uniform cost. It is the tail that does the damage: a uniformly slow family converges late but converges. `slow_agent_start_convergence` then drives the real `NodeAgentController.EvaluateAssignmentsAsync` round after round against a simulated multi-node cluster and asserts the properties the field reported losing: every agent converges, no agent is ever started on two nodes at once, no node is starved while another holds everything, a first placement wave emits zero stops and zero reassignments, a start slower than the ledger TTL is still held by the outstanding-dispatch probe, and a partially-started chunk's remainder still converges. Two things worth naming about the simulation: Time is measured in evaluation ROUNDS, not milliseconds. The field distribution is p50 27s / p95 82s / a 215s tail against a ~5s health-check cadence, so a wall-clock version would take hours and would trade a deterministic assertion for a timing race. Everything is seeded; a failure reproduces. An agent becomes RUNNING one round before it becomes VISIBLE to the leader. A node persists its assignment row only after the agent is up and the leader reads that row on a later snapshot, so there is a window in which an agent is genuinely running and looks completely unplaced -- that window is what JasperFxGH-3750 is about, and a simulation that closes it instantly cannot reproduce the field's falling assigned-agent count. Every assertion was checked against two mutations of the product code (the pending-assignment ledger never projected onto the grid; the pending placement set but not held) and each fails under at least one. The monotonic running-count check is the exception -- no mutation makes it fail, because against a stable node set it is strictly implied by the zero-churn assertion -- so it rides along inside that test, documented as the operator-visible restatement, rather than standing as a test that cannot fail. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0116vfBcKwcjWn8msM4ZjkuA
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.
Updates the message routing sample with the missing
.MessagesImplementing<T>option.resolves #593