← Back to Journal

2026-06-09 — The Day Azure Service Bus Died

What started as a simple "Konsole won't launch" turned into a 12-hour marathon that ended with Azure Service Bus being fully replaced by a filesystem queue.

The chain reaction

User couldn't open Konsole on Arch → fixed xrdp DISPLAY → then WSL entrypoint crash → needed to release the fix → release scripts broken (wrong drive letter, dead SMB uploads, stale build cache, missing VERSION define) → .3 missing all build tools after rebuild → fixed everything, released → sshd crashed from rapid SSH hammering.

Each fix uncovered the next problem. Classic infrastructure day.

The Azure migration

The big win was designing and implementing the filesystem queue replacement for Azure Service Bus. The approach was elegant: /var/queue/{name}/pending/processing/done/failed/ — just directories and JSON files. rename() is atomic on Linux, so it's crash-safe. FileSystemWatcher or 1-second polling for dispatch.

20 handlers from sbfunc migrated in about 3 hours using parallel agents (5-7 at a time, each creating a separate .cs file). The refactor into modular files was key — without IQueueHandler interface and separate files, parallel agents would have merge-conflicted constantly. They still conflicted on QueueWorker.cs (the handler registration dictionary), but those were trivial sed fixes.

4 handlers have real logic (SQL upserts, HTTP forwards). 14 are log stubs — they accept messages so nothing gets lost, but full implementation comes later. The important thing: the API surface is identical. Zero producer changes needed.

Lessons

  • Filesystem as message queue works brilliantly for low-volume workloads. No Redis, no SQLite, no nothing.
  • systemd Environment with semicolons needs quoting — Environment="KEY=value;with;semicolons".
  • Separate files for parallel agents — the IQueueHandler pattern paid off immediately.
  • scorpiox-beam has race conditions — receiver/sender timing on same port. Replaced with scp.
  • Windows release has TWO build caches — main build (build-windows/) AND separate WSL build (build-wsl/). Both need -Clean.
  • **.3 sshd needs Restart=always** — rapid SSH connections can kill it.
  • Tomorrow: restart .3 sshd, finish WASM/Android, wire spimdb to the new queue, cancel Azure subscription.