You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
docs(silo-eviction): the silo wedged from boot (#6432 investigation) - #6439
Doc only. Adds the investigation behind the 2026-10 silo-churn issues to Doc/Architecture/ReadingASiloEviction, so the next reader does not have to re-derive it from Loki.
A second eviction shape: a silo wedged from boot. It shows no memory pressure and no thread-pool stall. About 30 s after boot the silo's own hosted client gets no answer from messagehub/*/_Activity/import-manifest placed on the same silo. This held for 3 of 3 evicted pods (hrdhq on memex 10-09; 5j9gx and gvt4n on memex-cloud 10-10) and for none of the healthy new pods in those rolls.
Threads are consumed, not starved.poolThreads goes from 20 to 55 while about 500 work items complete per 10 s. A healthy pod in the same roll runs on 16 threads at about 47 000.
Why eviction takes 8 to 20 minutes. Orleans 10 answers pings in SiloConnection.HandlePingMessage, inside the receive loop. Everything else goes through MessageCenter.ReceiveMessage and Catalog.GetOrCreateActivation on that same loop. A silo with a blocked activation or dispatch path therefore keeps passing probes while answering nothing else.
What is still open. The blocking call itself needs the FailFast heap dump, which takes cluster access.
The evidence is in the governed Logs actions Ops/Actions/w11a-* on the control instance, and in the comment on #6432.
Why there is no code change
The blocking call has not been identified. Widening probe tolerance or adding a watchdog would be a band-aid; the existing page already argues against #6428-style tolerance.
…trend, why pings pass
Refs #6432, #6395. Records the measured second eviction shape: no stall,
no memory pressure, boot-time self-local grain calls unanswered, pool
threads climbing while throughput collapses, and Orleans answering pings
in the connection loop so eviction takes minutes. Names the FailFast dump
as the instrument for the still-unidentified blocking call.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…correlated incidents
#6394 does not name the placed silo and #6431 does not show a response
arriving and going undispatched; count them as correlated until the dump
or the remote log shows the same path.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Results for commit 5be9adc. ± Comparison against base commit 108ad86.
This pull request removes 10416 tests.
--- End of inner exception stack trace ---
--- End of inner exception stack trace ---, expected: True)
--- End of inner exception stack trace ---, isDenial: True)
---> (Inner Exception #1) MeshWeaver.Mesh.QueryProviderStalledException: Query provider(s) [pg] did not emit an Initial within the query fan-in's 16s bound for query 'nodeType:NodeType' (user 'system'). The merged Initial gates on EVERY provider, so this query has NO snapshot to answer with — it is reported as unavailable (retryable) rather than left hanging with no error. This is an availability failure, never a permission verdict: a consumer deciding access must fail CLOSED and say it could not establish the answer. Fix the stalled provider; never bump the consumer's timeout.<---
---> (Inner Exception #1) MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432<---
---> (Inner Exception #1) System.ArgumentException: Value does not fall within the expected range.<---
---> (Inner Exception #1) System.InvalidOperationException: boom<---
---> (Inner Exception #1) System.InvalidOperationException: source B is misconfigured<---
---> (Inner Exception #1) System.Net.Sockets.SocketException (0xFFFDFFFF): Name or service not known<---
…
♻️ This comment has been updated with latest results.
…ed, and the governed dump read
- The stall section said a probe is answered by a grain turn; Orleans 10 answers it in the
connection's receive loop, as the second shape already said. Both sections now say so, and
why a stalled process still misses it.
- The 15 s x 5 the page cites is the portal host's own configuration, which wins over core's
10 s x 3 baseline. ClusterMembershipTolerance's comment said the #6395 silo ran Orleans'
defaults; it did not, and the comment now says what the baseline does and does not cover.
- The dump is read with the governed AnalyzeDump action, not with cluster access.
Refs #6432
Refs #6395
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The PR description still says the required heap dump “takes cluster access,” while this corrected procedure says the governed AnalyzeDump action needs no direct cluster access. Update the PR description so its investigation summary does not preserve the obsolete operational requirement.
…ot the first line
Retention logs parked, deleted and kept lines before the headroom gate decides, so three
pages that said to read the first [crash-dumps] line now name the verdict line.
Refs #6432
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
“Answers nothing else” is stronger than this mechanism and contradicts the preceding counter evidence that some work continues. Receive loops that have not encountered the blocking message can still process traffic (including the pings used to explain the delayed eviction); only traffic on affected loops is shown to receive no answer. Narrow this sentence so the page does not turn selective dispatch blockage into a total-silo claim.
This issue also appears on line 216 of the same file.
Remove obsolete cluster-access requirement from the PR description
The PR description still says the FailFast dump “takes cluster access,” while this updated section correctly routes analysis through the governed AnalyzeDump action and explicitly says no direct cluster access is needed. Update the PR body to match the reviewed procedure so the investigation handoff does not preserve the obsolete operational requirement.
Update obsolete investigation plan in the remaining-unknowns paragraph
The later paragraph now establishes that #6395 was a boot-wedged silo, but the existing “What is not proven” paragraph still says the cause must be settled from CPU/GC metrics and the 20:43 probe window. This page’s new evidence already rules out that stall shape; what remains unknown is the blocking activation/dispatch call, which requires the armed FailFast dump. Update that paragraph so this class comment does not preserve the superseded investigation plan.
This correction is still contradicted by deploy/aks/README.md:1389-1390, which tells operators to read the first [crash-dumps] line. Since the script emits retention lines before its terminal arming result, that operational path can still misclassify the dump state. Update the README to use the last line of the relevant run as well.
HELD is not limited to insufficient free space: the script also emits it when numeric settings are unusable or df cannot report free space (crash-dump-retention.sh:74-78,125-127). Naming only storage pressure can send onboarding toward the wrong repair; preserve the reason carried by the actual log line.
The PR description still says the FailFast heap dump “takes cluster access,” while this change correctly documents that AnalyzeDump performs the read through the governed control-instance action with no direct cluster access. Update the description so the durable review context does not preserve the obsolete operational requirement.
Clarify that the remaining unknown is the blocking call
This now settles #6395 as a boot-wedged silo, but the same summary's “What is not proven” paragraph still says the unanswered probes need CPU/GC metrics and peer probe lines to settle. The new investigation already supplies those signals; what remains unknown is the blocking call, which requires the FailFast dump. Update that paragraph so it no longer sends the next investigation down the superseded path.
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
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.
Doc only. Adds the investigation behind the 2026-10 silo-churn issues to
Doc/Architecture/ReadingASiloEviction, so the next reader does not have to re-derive it from Loki.Refs #6432, #6395, #6429, #6392, #6394.
What the page now says
messagehub/*/_Activity/import-manifestplaced on the same silo. This held for 3 of 3 evicted pods (hrdhq on memex 10-09; 5j9gx and gvt4n on memex-cloud 10-10) and for none of the healthy new pods in those rolls.poolThreadsgoes from 20 to 55 while about 500 work items complete per 10 s. A healthy pod in the same roll runs on 16 threads at about 47 000.SiloConnection.HandlePingMessage, inside the receive loop. Everything else goes throughMessageCenter.ReceiveMessageandCatalog.GetOrCreateActivationon that same loop. A silo with a blocked activation or dispatch path therefore keeps passing probes while answering nothing else.FailFastheap dump, which takes cluster access.The evidence is in the governed
LogsactionsOps/Actions/w11a-*on the control instance, and in the comment on #6432.Why there is no code change
The blocking call has not been identified. Widening probe tolerance or adding a watchdog would be a band-aid; the existing page already argues against #6428-style tolerance.
Checks
dotnet build src/MeshWeaver.Documentation/MeshWeaver.Documentation.csproj -c Release -warnaserrorpasses: 0 warnings, 0 errors.Mirror-sync: none — no catalog keys changed.
🤖 Generated with Claude Code