• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

nats-io / nats-server / 28997574390
77%

Build:
DEFAULT BRANCH: main
Ran 09 Jul 2026 07:06AM UTC
Jobs 1
Files 67
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

08 Jul 2026 01:04PM UTC coverage: 76.509% (-0.05%) from 76.557%
28997574390

push

github

web-flow
[FIXED] MQTT: Pending QoS 1/2 deliveries leak when a subscription is downgraded to QoS 0 (#8359)

Re-subscribing an existing QoS 1/2 filter at QoS 0 deletes the filter's
JS consumer in processJSConsumer, but unlike mqttProcessUnsubs it did
not purge the consumer's entries from sess.cpending /
sess.pendingPublish. Any message that had a packet identifier assigned
but was never acknowledged (e.g. the client disconnected mid-flight)
then leaks: no consumer remains to redeliver it, so no PUBACK/PUBCOMP
ever arrives, and the identifier permanently counts against the
session's in-flight cap (effectiveMaxAck). Over a long-lived session
doing repeated QoS 2/1 -> QoS 0 -> QoS 2/1 re-subscribes the budget
erodes until QoS 1/2 delivery stalls.

Purge cpending and the associated pendingPublish entries on the QoS 0
downgrade path too. deleteConsumer is asynchronous, so on both teardown
paths (downgrade and unsubscribe) an in-flight delivery callback could
call trackPublish and repopulate the maps after the purge. Guard against
that with a new mqttSub.closed flag, set under sess.mu and sess.subsMu
(the delivery-field discipline) in the same critical section as the
purge; mqttDeliverMsgCbQoS12 checks it and skips re-tracking. The flag
leaves sub.mqtt valid so a delivery already past the guard can still
complete its enqueue (which dereferences sub.mqtt) without panicking.

72240 of 94420 relevant lines covered (76.51%)

618509.23 hits per line

Coverage Regressions

Lines Coverage ∆ File
1696
78.49
0.06% src/github.com/nats-io/nats-server/server/filestore.go
1142
25.63
-0.22% src/github.com/nats-io/nats-server/server/mqtt.go
208
80.24
0.8% src/github.com/nats-io/nats-server/server/raft.go
31
83.16
-0.08% src/github.com/nats-io/nats-server/server/jetstream_cluster.go
25
87.37
-0.45% src/github.com/nats-io/nats-server/server/consumer.go
19
74.14
-0.34% src/github.com/nats-io/nats-server/server/jetstream_api.go
11
85.7
-0.34% src/github.com/nats-io/nats-server/server/server.go
5
84.92
-0.23% src/github.com/nats-io/nats-server/server/jetstream.go
5
63.08
0.26% src/github.com/nats-io/nats-server/server/opts.go
5
86.18
-0.07% src/github.com/nats-io/nats-server/server/stream.go
4
57.11
-0.25% src/github.com/nats-io/nats-server/server/jetstream_errors_generated.go
4
72.17
-0.19% src/github.com/nats-io/nats-server/server/memstore.go
3
84.85
-0.14% src/github.com/nats-io/nats-server/server/events.go
3
76.38
-0.04% src/github.com/nats-io/nats-server/server/leafnode.go
3
82.55
0.0% src/github.com/nats-io/nats-server/server/route.go
2
88.85
0.02% src/github.com/nats-io/nats-server/server/client.go
Jobs
ID Job ID Ran Files Coverage
1 28997574390.1 09 Jul 2026 07:06AM UTC 67
76.51
GitHub Action Run
Source Files on build 28997574390
  • Tree
  • List 67
  • Changed 18
  • Source Changed 3
  • Coverage Changed 18
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #28997574390
  • 3a75a2bb on github
  • Prev Build on main (#28845133019)
  • Next Build on main (#29072708623)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc