Repository navigation
fix: validate silo startup before runtime initialization - #35
Merged
Merged
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
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
Follow-up to #34, covering the stream-expiry fixture and an independently diagnosed startup-validation leak exposed by the repeated CI runs.
Stream expiry
The repeated CI run on
mainexposed a timing assumption in the abandoned server-stream enumerator fixture:Orleans 10.1.0 and 10.3.1 both remove the enumerator table entry before cancellation/disposal, so observing the producer's finally makes the subsequent missing-enumerator assertion meaningful.
Startup validation before runtime initialization
The initial PR run passed both expiry tests but timed out in an unrelated read-only gate test. A two-CPU full-suite reproduction then timed out in a journal test. Serializing xUnit collections did not fix it.
Managed stacks showed 13 busy Orleans
DistributedGrainDirectory.ProcessMembershipUpdatesloops. A separate C# probe, referencing only stock Microsoft Orleans 10.3.1, reproduced the cause: a failed observer inRuntimeInitializecan leave runtime services started in that same stage running after disposal. The directory's membership stream completes while its stop token remains uncancelled, and the loop repeatedly subscribes to the completed stream.The functional silo validator now runs at
ServiceLifecycleStage.First. Its checks need registered services/options and the local manifest, not a running silo. Invalid definitions therefore fail before the runtime-start stage. The real-lifecycle regression asserts that aRuntimeInitializesentinel is never entered on rejection and is entered on valid startup. Documentation, its website mirror, the LLM corpus, and the changelog describe the earlier validation boundary.Verification
Response did not arrive on time in 00:00:03.0, actual1runtime starts; valid arm passed.No public package API, package version, tag, or publication changes. No test assertions or timeouts were weakened to address the startup leak, and collection parallelism remains enabled.