Severity: critical — the cluster message bus is down and alerting is blind (#756).
Timeline / evidence (2026-07-28, UTC)
12:17:22Z — first Failed to create RabbitMQ connection in Seq (RabbitMQ.Client.Exceptions.BrokerUnreachableException → SocketException: Name or service not known for host rabbitmq). Continuous every ~7s since.
docker node ls: dreamstream4 = Status Down, manager Unreachable (192.168.0.108).
docker service ps rabbitmq_rabbitmq: old task "Running 4 days ago" on ds4 (unconfirmable), replacement Pending ~2h — "no suitable node" because the stack pins node.hostname == dreamstream4 (rabbitmq/docker-stack.yml). No running task ⇒ swarm drops the rabbitmq DNS record ⇒ every connect fails name resolution (verified: getent hosts rabbitmq fails inside containers on the rabbitmq overlay, incl. long-running instantmesh).
Node half-alive: answers ping; ports 22/2377/5672/15672 accept TCP but never answer (HTTP 000, AMQP handshake dead — stale IPVS/ingress rules on a dead backend). Redis host-mode port 6379 on .108 closed → 6-node redis cluster degraded to 5.
No repo/deploy correlation: today's merges (QR-art artpipe deploys ~04:11Z, sponsor PRs) touched nothing on ds4 or the broker. Hardware/daemon failure.
Impact
All MassTransit/RabbitMQ traffic is dead: API publishes, notifications, keycloak/game event forwarding, book/quiz/media processing, delayed redelivery. Long-running consumers hold dead connections (silent); anything that (re)starts crash-loops.
SpikerSoft.EventHandlers.ArtPipeProcessor (resident artpipe-model-safety on 4090) restart-loops every ~7s, ~1500+ Seq error triplets and counting (separate hardening ticket).
Swarm lost 1 of its managers (quorum still intact) and the jetson-monitor on ds4.
Nobody was paged: alert email has been dead since ≥07-19 (#756).
Remediation (in order)
SSH to dreamstream4 (192.168.0.108) and restart dockerd (sudo systemctl restart docker), or power-cycle the Jetson. Broker data is safe on GlusterFS /mnt/rabbitmq; the pinned task reschedules automatically once the node is Ready. MassTransit consumers reconnect on their own; the safety crash-looper self-heals.
If ds4 won't come back: re-pin the broker — edit rabbitmq/docker-stack.yml constraint to another light Jetson (ds3 is the natural pick per the stack file's own placement rationale), git pull/mnt/infrastructure, docker stack deploy -c rabbitmq/docker-stack.yml rabbitmq. /mnt/rabbitmq is GlusterFS-shared and hostname: rabbitmq keeps the mnesia dir name, so state survives. Verify ds4's containers are actually dead first (they appear to be — AMQP handshake gets no reply locally) to rule out a split-brain double-broker on the shared mnesia dir.
Afterwards: check redis cluster state (cluster info — .108 is one of the 6 node IPs) and let ds4 rejoin.
Follow-ups this exposes: broker is a pinned SPOF with no failover story; #756 (dead alert mail) turned a 2-hour backbone outage into a silent one.
**Severity: critical — the cluster message bus is down and alerting is blind (#756).**
## Timeline / evidence (2026-07-28, UTC)
- **12:17:22Z** — first `Failed to create RabbitMQ connection` in Seq (`RabbitMQ.Client.Exceptions.BrokerUnreachableException` → `SocketException: Name or service not known` for host `rabbitmq`). Continuous every ~7s since.
- `docker node ls`: **dreamstream4 = Status Down, manager Unreachable** (192.168.0.108).
- `docker service ps rabbitmq_rabbitmq`: old task "Running 4 days ago" on ds4 (unconfirmable), replacement **Pending ~2h — "no suitable node"** because the stack pins `node.hostname == dreamstream4` (rabbitmq/docker-stack.yml). No running task ⇒ swarm drops the `rabbitmq` DNS record ⇒ every connect fails name resolution (verified: `getent hosts rabbitmq` fails inside containers on the rabbitmq overlay, incl. long-running instantmesh).
- Node half-alive: answers ping; ports 22/2377/5672/15672 **accept TCP but never answer** (HTTP 000, AMQP handshake dead — stale IPVS/ingress rules on a dead backend). **Redis host-mode port 6379 on .108 closed** → 6-node redis cluster degraded to 5.
- No repo/deploy correlation: today's merges (QR-art artpipe deploys ~04:11Z, sponsor PRs) touched nothing on ds4 or the broker. Hardware/daemon failure.
## Impact
- All MassTransit/RabbitMQ traffic is dead: API publishes, notifications, keycloak/game event forwarding, book/quiz/media processing, delayed redelivery. Long-running consumers hold dead connections (silent); anything that (re)starts crash-loops.
- `SpikerSoft.EventHandlers.ArtPipeProcessor` (resident artpipe-model-safety on 4090) restart-loops every ~7s, ~1500+ Seq error triplets and counting (separate hardening ticket).
- Swarm lost 1 of its managers (quorum still intact) and the jetson-monitor on ds4.
- **Nobody was paged: alert email has been dead since ≥07-19 (#756).**
## Remediation (in order)
1. **SSH to dreamstream4 (192.168.0.108) and restart dockerd** (`sudo systemctl restart docker`), or power-cycle the Jetson. Broker data is safe on GlusterFS `/mnt/rabbitmq`; the pinned task reschedules automatically once the node is Ready. MassTransit consumers reconnect on their own; the safety crash-looper self-heals.
2. **If ds4 won't come back**: re-pin the broker — edit `rabbitmq/docker-stack.yml` constraint to another light Jetson (ds3 is the natural pick per the stack file's own placement rationale), `git pull` `/mnt/infrastructure`, `docker stack deploy -c rabbitmq/docker-stack.yml rabbitmq`. `/mnt/rabbitmq` is GlusterFS-shared and `hostname: rabbitmq` keeps the mnesia dir name, so state survives. **Verify ds4's containers are actually dead first** (they appear to be — AMQP handshake gets no reply locally) to rule out a split-brain double-broker on the shared mnesia dir.
3. Afterwards: check redis cluster state (`cluster info` — .108 is one of the 6 node IPs) and let ds4 rejoin.
Follow-ups this exposes: broker is a pinned SPOF with no failover story; #756 (dead alert mail) turned a 2-hour backbone outage into a silent one.
Resolved 2026-07-28 ~14:42Z after the node was brought back online.
Recovery verification:
dreamstream4 Ready/Reachable again; rabbitmq_rabbitmq task Running on ds4 (data intact via GlusterFS). Overlay DNS for rabbitmq restored (VIP 10.0.5.208 + task IP — the two records are VIP+endpoint, not a split-brain; verified via docker network inspect rabbitmq -v).
ArtPipeProcessor (artpipe-model-safety) logged RabbitMQ connection created successfully and has been Running since ~14:31Z — crash-loop over. Redis .108:6379 answering again.
Second casualty found during recovery: the OpenBao raft cluster (ds1/ds3/ds4) was LEADERLESS during/after the outage — AppRole logins failed HTTP 500 local node not active but active cluster node not found, which is what broke the 14:11–14:34Z master CI runs (bao-secrets step) in both app repos. openbao-1 became active at 14:42:10Z; login path verified healthy (probe now returns a clean 400). Failed master runs re-triggered (backend 18925/18924, angular 18927/18928) — these are the deploy pipelines for backend#502 / angular#598.
Remaining follow-ups tracked separately: #886 (ArtPipeProcessor startup retry/backoff), #887 (blender image missing — unrelated, still broken). Worth considering a small follow-up on why raft didn't elect a new leader with 2/3 nodes up during the 12:17–14:42 window (suspect: leader was ds4's instance and a standby wasn't unsealed/vote-eligible). Closing as the outage itself is resolved. — Opus 5 Agent
Resolved 2026-07-28 ~14:42Z after the node was brought back online.
**Recovery verification:**
- dreamstream4 Ready/Reachable again; rabbitmq_rabbitmq task Running on ds4 (data intact via GlusterFS). Overlay DNS for `rabbitmq` restored (VIP 10.0.5.208 + task IP — the two records are VIP+endpoint, not a split-brain; verified via `docker network inspect rabbitmq -v`).
- ArtPipeProcessor (artpipe-model-safety) logged `RabbitMQ connection created successfully` and has been Running since ~14:31Z — crash-loop over. Redis .108:6379 answering again.
- **Second casualty found during recovery:** the OpenBao raft cluster (ds1/ds3/ds4) was LEADERLESS during/after the outage — AppRole logins failed HTTP 500 `local node not active but active cluster node not found`, which is what broke the 14:11–14:34Z master CI runs (bao-secrets step) in both app repos. openbao-1 became active at 14:42:10Z; login path verified healthy (probe now returns a clean 400). Failed master runs re-triggered (backend 18925/18924, angular 18927/18928) — these are the deploy pipelines for backend#502 / angular#598.
Remaining follow-ups tracked separately: #886 (ArtPipeProcessor startup retry/backoff), #887 (blender image missing — unrelated, still broken). Worth considering a small follow-up on why raft didn't elect a new leader with 2/3 nodes up during the 12:17–14:42 window (suspect: leader was ds4's instance and a standby wasn't unsealed/vote-eligible). Closing as the outage itself is resolved. — Opus 5 Agent
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Severity: critical — the cluster message bus is down and alerting is blind (#756).
Timeline / evidence (2026-07-28, UTC)
Failed to create RabbitMQ connectionin Seq (RabbitMQ.Client.Exceptions.BrokerUnreachableException→SocketException: Name or service not knownfor hostrabbitmq). Continuous every ~7s since.docker node ls: dreamstream4 = Status Down, manager Unreachable (192.168.0.108).docker service ps rabbitmq_rabbitmq: old task "Running 4 days ago" on ds4 (unconfirmable), replacement Pending ~2h — "no suitable node" because the stack pinsnode.hostname == dreamstream4(rabbitmq/docker-stack.yml). No running task ⇒ swarm drops therabbitmqDNS record ⇒ every connect fails name resolution (verified:getent hosts rabbitmqfails inside containers on the rabbitmq overlay, incl. long-running instantmesh).Impact
SpikerSoft.EventHandlers.ArtPipeProcessor(resident artpipe-model-safety on 4090) restart-loops every ~7s, ~1500+ Seq error triplets and counting (separate hardening ticket).Remediation (in order)
sudo systemctl restart docker), or power-cycle the Jetson. Broker data is safe on GlusterFS/mnt/rabbitmq; the pinned task reschedules automatically once the node is Ready. MassTransit consumers reconnect on their own; the safety crash-looper self-heals.rabbitmq/docker-stack.ymlconstraint to another light Jetson (ds3 is the natural pick per the stack file's own placement rationale),git pull/mnt/infrastructure,docker stack deploy -c rabbitmq/docker-stack.yml rabbitmq./mnt/rabbitmqis GlusterFS-shared andhostname: rabbitmqkeeps the mnesia dir name, so state survives. Verify ds4's containers are actually dead first (they appear to be — AMQP handshake gets no reply locally) to rule out a split-brain double-broker on the shared mnesia dir.cluster info— .108 is one of the 6 node IPs) and let ds4 rejoin.Follow-ups this exposes: broker is a pinned SPOF with no failover story; #756 (dead alert mail) turned a 2-hour backbone outage into a silent one.
Resolved 2026-07-28 ~14:42Z after the node was brought back online.
Recovery verification:
rabbitmqrestored (VIP 10.0.5.208 + task IP — the two records are VIP+endpoint, not a split-brain; verified viadocker network inspect rabbitmq -v).RabbitMQ connection created successfullyand has been Running since ~14:31Z — crash-loop over. Redis .108:6379 answering again.local node not active but active cluster node not found, which is what broke the 14:11–14:34Z master CI runs (bao-secrets step) in both app repos. openbao-1 became active at 14:42:10Z; login path verified healthy (probe now returns a clean 400). Failed master runs re-triggered (backend 18925/18924, angular 18927/18928) — these are the deploy pipelines for backend#502 / angular#598.Remaining follow-ups tracked separately: #886 (ArtPipeProcessor startup retry/backoff), #887 (blender image missing — unrelated, still broken). Worth considering a small follow-up on why raft didn't elect a new leader with 2/3 nodes up during the 12:17–14:42 window (suspect: leader was ds4's instance and a standby wasn't unsealed/vote-eligible). Closing as the outage itself is resolved. — Opus 5 Agent