nats: run 2.11.17, which hands a consumer with several filters every message (hq issue 266) #81

Merged
mesh-admin merged 1 commits from fix/nats-multi-filter-consumers-skip into main 2026-10-05 23:40:12 +00:00
Contributor

On nats 2.10.29 a JetStream consumer with more than one filter subject is sometimes moved past a matching message without delivering it. Nothing is left pending and nothing is redelivered. The controller's events consumer has seven filters, and on 2026-10-06 a merge announcement on the stream never reached it (hq issue 266).

  • The image is pinned to nats:2.11.17-alpine by its multi-arch index digest (sha256:e4bf19f1…). The Dockerfile now states the release, because a digest does not.
  • TestAConsumerWithSeveralFiltersIsHandedEveryMessage reproduces the skip with the controller's exact consumer config under mesh-shaped traffic. It fails on 2.10.29 ("5 of 354 followed events were never handed to the consumer… nothing pending") and passes on 2.11.17. I ran it 4 times in a row.
  • TestTheImageIsTheServerTestedHere keeps the Dockerfile's release equal to the tested nats-server version in go.mod.

The composed controller config (broker golden) parses on 2.11.17. Moving 2.10 → 2.11 is a one-way upgrade of the stream store, so roll it out when the bus can restart.

Checks: gofmt -l (clean), go vet ./..., go test ./... in modules/nats.

On nats 2.10.29 a JetStream consumer with more than one filter subject is sometimes moved past a matching message without delivering it. Nothing is left pending and nothing is redelivered. The controller's events consumer has seven filters, and on 2026-10-06 a merge announcement on the stream never reached it (hq issue 266). - The image is pinned to `nats:2.11.17-alpine` by its multi-arch index digest (`sha256:e4bf19f1…`). The Dockerfile now states the release, because a digest does not. - `TestAConsumerWithSeveralFiltersIsHandedEveryMessage` reproduces the skip with the controller's exact consumer config under mesh-shaped traffic. It fails on 2.10.29 ("5 of 354 followed events were never handed to the consumer… nothing pending") and passes on 2.11.17. I ran it 4 times in a row. - `TestTheImageIsTheServerTestedHere` keeps the Dockerfile's release equal to the tested nats-server version in go.mod. The composed controller config (broker golden) parses on 2.11.17. Moving 2.10 → 2.11 is a one-way upgrade of the stream store, so roll it out when the bus can restart. Checks: gofmt -l (clean), go vet ./..., go test ./... in modules/nats.
mesh-admin added 1 commit 2026-10-05 23:30:19 +00:00
On 2.10.29 such a consumer was moved past a message now and then without
handing it over; the controller's events consumer has seven filters, and a
merge on the stream never reached it. The test reproduces the skip on 2.10.29
and keeps the image's release equal to the server it tests.
mesh-admin merged commit cc2f19123a into main 2026-10-05 23:40:12 +00:00
mesh-admin deleted branch fix/nats-multi-filter-consumers-skip 2026-10-05 23:40:12 +00:00
Author
Contributor

Delivery novox/mesh-catalog@cc2f19123a49 — held since 2026-10-06T23:05:28Z

Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.

Delivery plan — builds nats, sent nowhere; a bus step; 1 wait(s) for a person

  • tier 0: nats
  • novox: waits for a person: nats
  • a planned bus step: the bus is upgraded by bus upgrade, never by an ordinary send
  • nats provides mesh-bus: its consumers are sent again after it
  • nats keeps data (ADR 0233): what it holds is backed up before it moves

Transitions

  • 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#81 merged; its head was not heard by this owner, so it is made from the forge's word
  • 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-catalog@cc2f19123a49` — **held** since 2026-10-06T23:05:28Z Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on. **Delivery plan** — builds nats, sent nowhere; a bus step; 1 wait(s) for a person - tier 0: nats - novox: waits for a person: nats - a planned bus step: the bus is upgraded by `bus upgrade`, never by an ordinary send - nats provides mesh-bus: its consumers are sent again after it - nats keeps data (ADR 0233): what it holds is backed up before it moves **Transitions** - 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#81 merged; its head was not heard by this owner, so it is made from the forge's word - 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#81