Sync-stream hubs still at RunLevel=Starting hold never-finishing DeliveryFailure turns through mesh teardown, overrunning DrainAsync's 30 s bound
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
Read MeshTeardownExtensions.DrainAsync and MeshTeardownHostedService, then trace the delivery pipeline's DeliveryFailure handling and the sync-stream hub handlers. The report does not identify the handler's cause or the failing delivery; inspect the two hubs' failure payloads and Loki lines from 07:44–07:58Z, then check for disposal wedge or discard events. Done means identifying why the turns hang and whether teardown cancellation reaches them.
索引モデルが issue の本文から書いたものです。
説明
Observed
During pod shutdown, MeshWeaver.Mesh.MeshTeardownExtensions.DrainAsync (reported by MeshWeaver.Hosting.MeshTeardownHostedService, 30 s TeardownTimeout) gave up on mesh {path}: the mesh root and its {path} child sit at RunLevel=DisposeHostedHubs, Disposal=Pending with all queues empty, held by two hosted sync hubs — {path} and {path} — which are still at RunLevel=Starting (openGates=1) and whose action blocks have each been executing a single DeliveryFailure turn for 501 240 ms (~8.4 min) and 801 280 ms (~13.4 min), with the pumps draining (drainsInFlight=1) and one further turn queued (buffer=1) behind each. Both wedged turns began minutes before the teardown started (≈07:49:33Z and ≈07:44:33Z against the 07:57:54Z log line).
Two structural facts about the wedged hubs, read against {path}:
- The executing turn is not the hub's
InitializeHubRequest, so the bring-up cancel path ("a hub that never finished starting") does not reach it. - Each hub's
ShutdownRequestqueues FIFO behind the wedged turn, so neither hub ever begins disposing — the stall detector ([DISPOSE-WEDGE],CancelExecution()) arms on the hub's ownDisposeand therefore never fires. No cooperative cancellation path reached these turns at all; the teardown's outer bound reported, as designed, and the host proceeded over unfinished work.
Where and when
One occurrence, one pod (memex-portal-deployment-5897bcf6d4-hdssc), namespace memex-cloud, at a single instant during pod termination. The wedged turns predate the shutdown by 8–13 minutes; the timeout itself is the designed caller bound reporting, not a crash or a burst.
Impact
Judged from the numbers: on this burst the overrun is bounded — the host logs, proceeds to HostOptions.ShutdownTimeout and the pod grace ceiling ends the process; no serving degradation is evidenced on this incident. The concern is the wedged-turn shape itself: a DeliveryFailure turn that does not finish for 8–13 minutes on a hub still mid-bring-up, reachable by no cancellation path in the teardown design.
Related report — possible same family, not established
{path} (2026-10-28, one day earlier, same memex-cloud instance): a serving cache hub {path} wedged executing a single DeliveryFailure for ~2.5 h, queue growing to ~17k, ~40% of MCP {path} timing out. Same message shape (one never-finishing DeliveryFailure turn), same instance, different hub role and consequence. Not established that the two are the same defect; if confirmed, this incident's severity should be re-ruled upward (the sibling report describes instance-wide degradation).
Not established
- The cause of the turns not finishing — no handler stack, await site or
DeliveryFailurepayload was read. - What delivery each
DeliveryFailurereports (the failing delivery's target and exception are inside the message, not in the log line). - Whether it still occurs, whether other pods or log sites show the same wedged turn, and whether this pod was part of a roll (only that
MeshTeardownHostedServiceran, i.e. SIGTERM, is evidenced). - Which {path} the
sync/*hubs belong to (ids are instance-scoped; the per-instance identity is masked). - Whether
[DISPOSE-WEDGE]/DISPOSAL DEADLOCKlines exist for these two hub addresses (see candidate cause 2).
Candidate causes and the reading that separates them
- The
DeliveryFailurehandler on a sync hub blocks on an await that never completes — the same shape the 2026-10-28 report describes on a serving cache hub. Predicts: a dump of the executing turn parks on a named await, and theDeliveryFailurepayload names the delivery and target that failed. Reading: theDeliveryFailurecontent for both hub ids (its inner failure names the failed delivery and address), and the Loki lines for podmemex-portal-deployment-5897bcf6d4-hdssccovering 07:44–07:58Z, which show what delivery failed and what the hub was doing when the turn was accepted. - A structural gap: no cancellation path reaches a wedged turn on a hub that never began disposing (mechanism for why 8–13 min elapsed untouched, not the cause of the turn not finishing). Predicts: no
[DISPOSE-WEDGE](7311) /DISPOSAL DEADLOCK DETECTED(7312) lines and no[DISPOSE-DISCARD]naming these two hub addresses in this window — their presence would move the finding to a turn that received and ignored cancellation; their absence confirms the gap. Reading: Loki search for those event ids against the two sync addresses. - The
DeliveryFailureis a downstream symptom of the never-finished bring-up (RunLevel=Starting,openGates=1): a delivery failed against the half-started hub and its failure handler interacts with the still-shut initialization gate. Predicts: theDeliveryFailure's inner exception names the bring-up or the gate rather than an external target. Reading: the same payload as (1) separates this from (1) by the ordering of the inner failure.
Where to look
MeshWeaver.Mesh.MeshTeardownExtensions.DrainAsyncandMeshWeaver.Hosting.MeshTeardownHostedService(the 30 s bound that reported) — meshweaver partition.- The
DeliveryFailurehandling path in the delivery pipeline (a[CanBeIgnored]message per the teardown docs) and thesync/*(sync-stream) hubs' handlers. {path}(the two layers, the bring-up exception, the stall verdicts),{path},{path},{path}.- Related report:
{path}.
Severity note: sev:M because this burst alone is a bounded shutdown overrun on one pod with no evidenced serving impact; the sibling report from the previous day, if confirmed as the same wedged-DeliveryFailure defect, warrants a human re-ruling upward.
Evidence
| Fingerprint | b90bf68dc7209342 |
| Category | MeshWeaver.Hosting.MeshTeardownHostedService |
| Severity | Error |
| Exception | System.TimeoutException |
| Top frame | MeshWeaver.Mesh.MeshTeardownExtensions.DrainAsync(IMessageHub mesh, IoPoolRegistry ioPools, AsyncDisposeQueue asyncDisposeQueue, TimeSpan timeout, MeshTeardownSignal teardownSignal, Boolean activitiesQuiesced, ILogger logger, ActivityQuiesceReport quiesce) |
Namespace memex-cloud |
1 occurrence(s), 2026-10-29 07:57:54Z → 2026-10-29 07:57:54Z; pods memex-portal-deployment-5897bcf6d4-hdssc |
| Occurrences | 1 |
| First seen | 2026-10-29 07:57:54Z |
| Last seen | 2026-10-29 07:57:54Z |
| Routing | not determined — no configured route matches the category MeshWeaver.Hosting.MeshTeardownHostedService. 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-29 07:57:54Z memex-portal-deployment-5897bcf6d4-hdssc fail: MeshWeaver.Hosting.MeshTeardownHostedService[0]
MeshTeardownHostedService: mesh {path} did not finish draining within 00:00:30 — the host proceeds to dispose its container over work that has not finished. Find what is still going down; do not widen the budget.
Hub {path} RunLevel=DisposeHostedHubs Disposal=Pending Queue(buffer=0,deferred=0,drainsInFlight=0,openGates=0,draining=False,drainsAwaitingScheduler=0) Registrants=35
HostedHubs (1):
Hub {path} RunLevel=DisposeHostedHubs Disposal=Pending Queue(buffer=0,deferred=0,drainsInFlight=0,openGates=0,draining=False,drainsAwaitingScheduler=0) Registrants=5
HostedHubs (2):
Hub {path} RunLevel=Starting Disposal=Pending Queue(buffer=1,deferred=0,drainsInFlight=1,openGates=1,draining=True,drainsAwaitingScheduler=0) Executing(DeliveryFailure, 501240ms) Registrants=6
Hub {path} RunLevel=Starting Disposal=Pending Queue(buffer=1,deferred=0,drainsInFlight=1,openGates=1,draining=True,drainsAwaitingScheduler=0) Executing(DeliveryFailure, 801280ms) Registrants=6
System.TimeoutException: Mesh {path}: disposal did not complete within 00:00:30. Something on the action block is not finishing — find it; do not widen the budget.
Hub {path} RunLevel=DisposeHostedHubs Disposal=Pending Queue(buffer=0,deferred=0,drainsInFlight=0,openGates=0,draining=False,drainsAwaitingScheduler=0) Registrants=35
HostedHubs (1):
Hub {path} RunLevel=DisposeHostedHubs Disposal=Pending Queue(buffer=0,deferred=0,drainsInFlight=0,openGates=0,draining=False,drainsAwaitingScheduler=0) Registrants=5
HostedHubs (2):
Hub {path} RunLevel=Starting Disposal=Pending Queue(buffer=1,deferred=0,drainsInFlight=1,openGates=1,draining=True,drainsAwaitingScheduler=0) Executing(Deliv…[truncated]
Opened automatically from Admin/_LogIncident/b90bf68dc7209342. Recurrences are folded into this issue rather than opening new ones.
It also stands for the whole log site 950626c18f056bf0: other fingerprints of this site fold in here as comments rather than opening tickets of their own.
- 主要言語
- C#
- スター
- 12
- フォーク
- 5
- 平均マージ
- 6時間 30分
- マージ済み PR(30日)
- 960
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドなし
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
Systemorph/MeshWeaver のほかの issue
-
bug ci-failure sev:H
難易度 4/5 3〜5日 初心者へのやさしさ 42/100
Systemorph/MeshWeaver#7549 ·
メンテナーはふだん 1 日以内に返信
-
bug sev:M
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
Systemorph/MeshWeaver#7542 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
-
area:hosting enhancement feature:registry-retention sev:M
難易度 5/5 1週間以上 初心者へのやさしさ 20/100
Systemorph/MeshWeaver#7530 ·
メンテナーはふだん 1 日以内に返信
-
bug sev:L
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
Systemorph/MeshWeaver#7497 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
bug sev:M
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
Systemorph/MeshWeaver#7496 ·
メンテナーはふだん 1 日以内に返信
Systemorph/MeshWeaver の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
bug 優先: 低
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
-
.NET area: storage bug good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
Larson-Logan/medal-sync#61 ·
メンテナーはふだん 1 日以内に返信