Portal hub stream-subscription attach times out during silo churn, latching the circuit into cross-process-routing-disabled
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 22/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- csharp
- Domain
- backend, distributed-systems
Research direction
Start in src/MeshWeaver.Connection.Orleans/OrleansRoutingService.cs at SubscribeWhenStreamingReadyAsync (around line 1949) and trace where the RegisterConsumer TimeoutException goes, including the IsTransientFailure check and the retry budget added in #2633. Done means establishing whether a 30 s timeout is retried or latches the circuit, then agreeing the fix with maintainers, since the issue asks for that decision.
Written by the indexing model from the issue text.
Description
What is failing
A portal hub's Orleans Memory stream subscription failed to attach: the IPubSubRendezvousGrain.RegisterConsumer call from OrleansRoutingService.SubscribeWhenStreamingReadyAsync timed out after the full 30 s budget against the rendezvous grain on a remote silo. The hub was consequently latched into "cross-process routing DISABLED" for its circuit — in-process routing remains active, but the circuit cannot be reached over the stream fallback leg until it re-registers.
Probable cause
The RegisterConsumer call could not complete because the silo hosting the rendezvous grain was mid-departure or unresponsive — this fired in the closing minutes of a rolling-deploy churn window that dominates the log today (the SiloUnavailableException stream-leg incidents on the memory-* pods immediately precede it). Per Doc/Architecture/OrleansStreamPubSubDurability, since #2633 the attach is retried on a bounded, loud budget gated on the same IsTransientFailure the delivery leg uses — a 30 s TimeoutException either exhausted that budget or was not classified as transient by it, and the failure latched. Confidence: medium — the churn correlation is circumstantial; the open question for whoever picks this up is whether System.TimeoutException from the RegisterConsumer call reaches the IsTransientFailure predicate at all, and whether a 30 s per-attempt timeout can outrun the retry budget in practice.
Impact
Narrow so far, and narrower than this log reads: since the #1742 transport swap, the primary route to a pod-process hub is a directed grain call — the stream carries only the roll window and client-owned hubs. So the loss is confined to the stream fallback leg for the one affected portal circuit on the one pod that logged it (counts in the footer): other silos' deliveries to that circuit will be refused by the HasLiveSubscriber check with a DeliveryFailure{NotFound} rather than silently dropped, and in-process traffic is unaffected. The circuit stays in this state until it re-registers.
Where to look
MeshWeaver.Connection.Orleans/OrleansRoutingService.cs — SubscribeWhenStreamingReadyAsync (the top frame, line 1949 in the sample) and the bounded retry budget added in #2633. Check how the RegisterConsumer TimeoutException flows into that budget, and whether the budget should be sized against the 30 s grain-call timeout rather than attempt count. Context: Orleans Stream Pub-Sub Durability (residual "attach failed" section — this is exactly the genuine race plus the permanent-attach-failure case that page says still fires at Critical); related: #2633, #1742, #2320, #2322, Pod-Hub Delivery Roll Plan.
Already known?
Not a duplicate of any open incident, but it is the documented residual: the durability page predicts precisely this signal surviving after #2633 whenever a genuinely dead target meets the retry budget. The surrounding SiloUnavailableException incidents share the roll-churn trigger but are distinct fingerprints; if this recurs on every roll, consider folding it into the #2320/#2322 stream-leg work rather than fixing the retry loop in isolation.
Evidence
| Fingerprint | fb31e284cf14f42d |
| Category | MeshWeaver.Connection.Orleans.OrleansRoutingService |
| Severity | Critical |
| Exception | System.TimeoutException |
| Top frame | MeshWeaver.Connection.Orleans.OrleansRoutingService.SubscribeWhenStreamingReadyAsync(Address address, AsyncDelivery callback, CancellationToken ct) |
| Namespace | memex-cloud |
| Pods | memex-portal-deployment-85587f8869-prgnp |
| Occurrences | 1 |
| First seen | 2026-10-10 08:15:52Z |
| Last seen | 2026-10-10 08:15:52Z |
| Routing | not determined — no configured route matches the category MeshWeaver.Connection.Orleans.OrleansRoutingService. 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-10 08:15:52Z memex-portal-deployment-85587f8869-prgnp crit: MeshWeaver.Connection.Orleans.OrleansRoutingService[0]
Orleans 'Memory' stream subscription could not be attached for portal/E55k_sEouET-v-GxdzPVVsJFmTD8m7ksYyrEtNnU6JI — cross-process routing for this hub is DISABLED (in-process routing remains active)
System.TimeoutException: Response did not arrive on time in 00:00:30 for message: Request [S10.244.17.58:11111:150624528 sys.client/hosted-10.244.17.58:11111@150624528]->[S10.244.6.128:11111:150624604 pubsubrendezvous/Memory/null/portal/E55k_sEouET-v-GxdzPVVsJFmTD8m7ksYyrEtNnU6JI] Orleans.Streams.IPubSubRendezvousGrain.RegisterConsumer(Orleans.Runtime.GuidId, Orleans.Runtime.QualifiedStreamId, Orleans.Runtime.GrainId, System.String, System.Threading.CancellationToken) #3DCF28F662E35FFF.
at Orleans.Serialization.Invocation.ResponseCompletionSource.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token) in /_/src/Orleans.Serialization/Invocation/ResponseCompletionSource.cs:line 100
at System.Threading.Tasks.ValueTask.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
--- End of stack trace from previous location ---
at Orleans.Streams.StreamConsumer`1.SubscribeAsyncImpl(IAsyncObserver`1 observer, IAsyncBatchObserver`1 batchObserver, StreamSequenceToken token, Nullable`1 startPosition, String filterData) in /_/src/Orleans.Streaming/Internal/StreamConsumer.cs:line 132
at MeshWeaver.Connection.Orleans.OrleansRoutingService.SubscribeWhenStreamingReadyAsync(Address address, AsyncDelivery callback, CancellationToken ct) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Connection.Orleans/OrleansRoutingService.cs:line 1949
Opened automatically from Admin/_LogIncident/fb31e284cf14f42d. Recurrences are folded into this issue rather than opening new ones.
It also stands for the whole log site 2735188207964df5: 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
- 4h 24m
- Merged PRs (30d)
- 961
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
-
bug sev:M
Difficulty 4/5 3-5 days Newbie friendliness 42/100
Systemorph/MeshWeaver#6548 · 1 comment ·
Maintainers usually reply within 1 day
-
bug issue-taxonomy-sentinel sev:M
Difficulty 2/5 1-3 hours Newbie friendliness 25/100
Systemorph/MeshWeaver#6546 · 1 comment ·
Maintainers usually reply within 1 day
-
Module containers: a root singleton reaching a module service while a module singleton needs a root singleton deadlocks (lock order root/module inverted)Possibly taken @rbuergi claimed this today. Openbug sev:M
Difficulty 5/5 Over a week Newbie friendliness 25/100
Systemorph/MeshWeaver#6542 · 1 comment ·
Maintainers usually reply within 1 day
-
Release availability advisories are persisted and rendered as English sentences (Updates tab, de viewers)Possibly taken @rbuergi claimed this today. Openbug sev:M
Difficulty 4/5 3-5 days Newbie friendliness 35/100
Systemorph/MeshWeaver#6540 ·
Maintainers usually reply within 1 day
-
bug sev:M
Difficulty 4/5 3-5 days Newbie friendliness 48/100
Systemorph/MeshWeaver#6527 ·
Maintainers usually reply within 1 day
All issues in Systemorph/MeshWeaver
Similar issues
-
needs-area-label
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Fallout-build/Fallout#708 ·
Maintainers usually reply within 5 days
-
bug next version
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
Rem0o/FanControl.Releases#4220 · 1 comment ·
-
area:repo audit:approved audit:auto priority:P3
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
elsa-workflows/elsa-core#8771 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
nkdAgility/azure-devops-migration-tools#3217 ·
Maintainers usually reply within 1 day