Skip to content

docs(silo-eviction): the silo wedged from boot (#6432 investigation) - #6439

Merged
rbuergi merged 9 commits into
mainfrom
docs/6432-silo-wedged-at-boot
Oct 10, 2026
Merged

rbuergi merged 9 commits into
mainfrom
docs/6432-silo-wedged-at-boot

Conversation

@rbuergi

@rbuergi rbuergi commented Oct 10, 2026

Copy link
Copy Markdown
Contributor

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

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.

Checks

  • dotnet build src/MeshWeaver.Documentation/MeshWeaver.Documentation.csproj -c Release -warnaserror passes: 0 warnings, 0 errors.
  • The change adds no internal links.

Mirror-sync: none — no catalog keys changed.

🤖 Generated with Claude Code

…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>
Copilot AI balanced review requested due to automatic review settings October 10, 2026 12:27

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Some correlated incidents are presented as causally proven despite insufficient evidence.

1 open finding
What changed in this PR

Documents the boot-time silo wedge investigation and its diagnostic fingerprint.

Changes:

  • Adds boot, thread-pool, and eviction indicators.
  • Extends the investigation procedure and dump guidance.
  • Relates observed downstream timeout incidents.
File Description
src/​MeshWeaver.Documentation/​Data/​Architecture/​ReadingASiloEviction.md Adds the boot-wedge investigation and diagnostic procedure.

🧠 Review effort: Balanced


💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

rbuergi and others added 2 commits October 10, 2026 14:57
…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>
Copilot AI balanced review requested due to automatic review settings October 10, 2026 12:57

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The thread-pool counters are presented as proving permanent blocking, although they establish only thread injection and reduced throughput.

1 open finding
1 resolved since last review

🧠 Review effort: Balanced

@github-actions

github-actions Bot commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Test Results

    4 files   -     20      4 suites   - 20   8m 37s ⏱️ - 44m 35s
1 222 tests  - 10 392  1 222 ✅  - 10 199  0 💤  - 193  0 ❌ ±0 
1 226 runs   - 10 402  1 226 ✅  - 10 209  0 💤  - 193  0 ❌ ±0 

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.

rbuergi and others added 2 commits October 10, 2026 20:56
… that a thread never returns

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 10, 2026 18:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The new guidance conflicts with existing ping/configuration documentation and incorrectly claims no governed dump action exists.

3 open findings
1 resolved since last review

🧠 Review effort: Balanced

…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>
Copilot AI balanced review requested due to automatic review settings October 10, 2026 19:14

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The documentation retains a contradictory incident classification and assumes a crash dump always exists.

2 open findings
3 resolved since last review

🧠 Review effort: Balanced

…vidence of a serving silo

Refs #6432
Refs #6395

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 10, 2026 19:26

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The dump-log instruction and stale PR description could misdirect incident investigation.

1 open finding
2 resolved since last review
Previously missed (1)

In code that hasn't changed since last review

Low severity Update PR description to remove obsolete cluster-access requirement

src/​MeshWeaver.Documentation/​Data/​Architecture/​ReadingASiloEviction.md:214

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.

🧠 Review effort: Balanced

…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>
Copilot AI balanced review requested due to automatic review settings October 10, 2026 19:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Several operational statements remain ambiguous or inconsistent with the documented evidence and retention-script behavior.

2 open findings
1 resolved since last review
Previously missed (3)

In code that hasn't changed since last review

Low severity Limit no-response claim to traffic on affected receive loops

src/​MeshWeaver.Documentation/​Data/​Architecture/​ReadingASiloEviction.md:185

“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.

Low severity Remove obsolete cluster-access requirement from the PR description

src/​MeshWeaver.Documentation/​Data/​Architecture/​ReadingASiloEviction.md:214

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.

Low severity Update obsolete investigation plan in the remaining-unknowns paragraph

src/​MeshWeaver.Hosting.Orleans/​ClusterMembershipTolerance.cs:27

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.

🧠 Review effort: Balanced

…retention errors are not it

Refs #6432

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 10, 2026 19:38

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Operational documentation and the PR description still contain conflicting or overly narrow dump-diagnostic guidance.

0 open findings

2 resolved since last review
Previously missed (4)

In code that hasn't changed since last review

Low severity Update README to inspect the final crash-dump status line

src/​MeshWeaver.Documentation/​Data/​Architecture/​DebuggingNativeCrashes.md:152

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.

Low severity Preserve the actual reason for HELD dump status

src/​MeshWeaver.Documentation/​Data/​Architecture/​OnboardingNewEnvironment.md:279

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.

Low severity Correct PR description about FailFast dump access

src/​MeshWeaver.Documentation/​Data/​Architecture/​ReadingASiloEviction.md:214

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.

Low severity Clarify that the remaining unknown is the blocking call

src/​MeshWeaver.Hosting.Orleans/​ClusterMembershipTolerance.cs:27

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.

🧠 Review effort: Balanced

@rbuergi
rbuergi enabled auto-merge October 10, 2026 19:43
@rbuergi
rbuergi merged commit 96a2a7b into main Oct 10, 2026
@rbuergi
rbuergi deleted the docs/6432-silo-wedged-at-boot branch October 11, 2026 07:23
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.

2 participants