Fleet coordinator schedule faults with ObjectDisposedException when the ledger stream's MeshNodeStreamCache is disposed mid-read
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
Research direction
Start with FleetCoordinatorRuntime.cs, especially LedgerWakes and the self-healing wrapper described in the issue, then inspect the MeshNodeStreamCache dispose path in MeshWeaver mesh services. The issue points to a framework-level race but does not identify which teardown triggers it. Done means a live GetMeshNodeStream reader no longer leaks ObjectDisposedException on cache disposal; also check the related consumer in #6078.
Written by the indexing model from the issue text.
Description
What is failing
The fleet coordinator's schedule — armed on the always-on Hosting/PlatformBuilds hub by FleetCoordinatorRuntime.AddFleetCoordinator — faults when the backing MeshNodeStreamCache of its long-lived read of the Hosting/Triage/Status ledger stream is disposed mid-subscription. The ObjectDisposedException tears down the merged schedule (round loop, startup, ledger wakes, heartbeat); the self-healing wrapper catches it and re-arms a minute later, so the coordinator is deaf to event wakes (red main, new bug, feedback, stuck) for up to that minute.
Probable cause
Medium-high confidence on the mechanism, lower on the trigger. The coordinator holds node-stream subscriptions for the whole life of the hub: LedgerWakes samples hub.GetMeshNodeStream(CoordinatorSnapshot.StatusPath) — the Hosting/Triage/Status ledger — continuously. When the mesh-node cache backing that node is torn down underneath the reader (a node-hub recycle/quiesce or hub re-activation), the read throws instead of re-acquiring. This is the same dispose race as #6078 (the review-slot watcher, same exception, same object name, different consumer) and the same family as #5958; what this incident cannot establish is which teardown disposed the cache at the moment of the fault — the window shows Hosting/Coordination and Hosting/PlatformBuildInbox type recycles minutes before, but no single event lines up exactly. The residual defect is the framework's: a long-lived GetMeshNodeStream reader should survive an owning hub's teardown transparently or fail quietly — leaking ObjectDisposedException into consumers is the bug, and the coordinator's self-healing only masks it at this one consumer.
Impact
Judged from the numbers: a single occurrence on a single pod of the control (memex) deployment, self-healed by the designed one-minute restart. The design absorbs it — the heartbeat (default 30 min) and the next wake cover the gap, rounds are coalesced not lost, and no round was in flight (the round loop's own Catch logs a different message). Internal control plane only; no user-facing path, no data loss. Cost: at most a one-minute delay in event-driven prioritisation.
Not a duplicate, but closely related. #6078 is the same defect at the PullRequestSweep consumer (different log category, different fingerprint site) and remains open; if the fix lands at the MeshNodeStreamCache level, both consumers heal together and this can be closed as such.
Where to look
- FleetCoordinatorRuntime.cs —
AddFleetCoordinator: theTriageIntake.SelfHealingwrapper that logs this fault and re-arms after a minute, andhub.RegisterForDisposal(signal);LedgerWakes: the long-livedGetMeshNodeStreamonHosting/Triage/Statusthat throws. - The framework's
MeshNodeStreamCache(MeshWeaver mesh services): its dispose path and whether a live reader can observe it — whetherGetMeshNodeStreamshould re-acquire after the owning hub's teardown rather than throw. Same seam as #6078.
Evidence
| Fingerprint | 19ba7381a30e3924 |
| Category | FleetCoordinator |
| Severity | Error |
| Exception | System.ObjectDisposedException |
| Namespace | memex |
| Pods | memex-portal-deployment-54ff68d87d-f5hp9 |
| Occurrences | 1 |
| First seen | 2026-10-07 03:10:04Z |
| Last seen | 2026-10-07 03:10:04Z |
| Routing | not determined — no configured route matches the category FleetCoordinator. This repository is the configured fallback, not a finding about who owns the fault; the category names the LOGGER, which may not be the subject. |
Recent log lines
2026-10-07 03:10:04Z memex-portal-deployment-54ff68d87d-f5hp9 fail: FleetCoordinator[0]
[Coordinator] the schedule faulted on Hosting/PlatformBuilds — restarting in a minute
System.ObjectDisposedException: The mesh-node cache was disposed; the read of 'Hosting/Triage/Status' ended with it.
Object name: 'MeshNodeStreamCache'.
Opened automatically from Admin/_LogIncident/19ba7381a30e3924. Recurrences are folded into this issue rather than opening new ones.
It also stands for the whole log site fd9bb2e2c965b0a4: other fingerprints of this site fold in here as comments rather than opening tickets of their own.
- Dominant language
- C#
- Stars
- 12
- Forks
- 5
- Avg merge
- 3h 59m
- Merged PRs (30d)
- 975
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- No contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Systemorph/MeshWeaver
-
sev:L
Difficulty 1/5 Under an hour Newbie friendliness 72/100
Systemorph/MeshWeaver#6233 ·
Maintainers usually reply within 1 day
-
Doc/AI/ModelProviderSettings references removed ModelsSettingsTab.cs — update to point at Providers/ProvidersApp (ProviderSetup, /Provider/AiModels)Possibly taken A pull request linked to this issue is open or already merged. Opendocumentation feedback sev:L
Difficulty 1/5 Under an hour Newbie friendliness 82/100
Systemorph/MeshWeaver#6033 ·
Maintainers usually reply within 1 day
-
area:search documentation
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Systemorph/MeshWeaver#6030 ·
Maintainers usually reply within 1 day
-
ApiTokenService.RevokeToken posts its revocation SaveMeshNodeRequest from the mesh (router) hub instead of a node-operation hubPossibly taken A pull request linked to this issue is open or already merged. Openbug sev:M
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Systemorph/MeshWeaver#6026 · 1 comment ·
Maintainers usually reply within 1 day
-
area:hosting bug sev:L
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Systemorph/MeshWeaver#6025 ·
Maintainers usually reply within 1 day
All issues in Systemorph/MeshWeaver
Similar issues
-
type/automation type/tech-debt
Difficulty 1/5 Under an hour Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
no-stack-trace
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
Maintainers usually reply within 1 day
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
Maintainers usually reply within 1 day
-
v9 review: TestingOpendocs/external squad/utforming
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Altinn/altinn-studio#21041 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
stryker-mutator/stryker-net#3892 ·
Maintainers usually reply within 1 day