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

nats-io / nats-server / 26079329094
73%

Build:
DEFAULT BRANCH: main
Ran 19 May 2026 07:06AM UTC
Jobs 1
Files 64
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

18 May 2026 03:50PM UTC coverage: 77.165% (-5.9%) from 83.064%
26079329094

push

github

web-flow
[IMPROVED] Replace time.After with reusable timer in snapshot and catchup loops (#8186)

## Overview

`time.After` creates a new channel and timer that cannot be garbage
collected until the timer fires. When used inside a loop, each iteration
leaks a timer for the full timeout duration.

PR #4756 fixed identical instances in `client.go`, `consumer.go`,
`jetstream_cluster.go`, and `mqtt.go`, but two instances were missed (or
introduced later):

1. **`server/jetstream_api.go`, snapshot chunk-streaming loop**
(introduced in #7828):
The `for index := 1; ; index++` loop runs once per snapshot chunk. A 1
GB snapshot with 128 KB chunks creates ~8,000 iterations, each leaking a
5-second timer (`snapshotAckTimeout`).

2. **`server/jetstream_cluster.go`, `runCatchup` loop** (introduced in
#5454):
The `for { select { ... } }` loop runs continuously during stream
catchup. When `nextBatchC` or `cbKick` fires instead of the 500 ms
timer, the timer is abandoned every iteration.

## Changes

Replace `time.After(duration)` with a `time.NewTimer` created before the
loop, using the `Stop`/drain/`Reset` pattern to reuse it across
iterations. This matches the exact pattern established in #4756.

## Testing

Existing snapshot and catchup tests pass:
- `TestJetStreamSnapshots` (0.61s)
- `TestJetStreamSnapshotsAPI` (0.24s)
- `TestJetStreamSnapshotRestoreStallAndHealthz` (0.04s)
- `TestJetStreamClusterStreamCatchupNoState` (5.68s)
- `TestJetStreamClusterStreamCatchupWithTruncateAndPriorSnapshot`
(2.25s)
- `TestJetStreamClusterStreamCatchupInteriorNilMsgs` (1.12s)

Closes #8185. Relates to #4756.

72024 of 93338 relevant lines covered (77.16%)

400212.03 hits per line

Coverage Regressions

Lines Coverage ∆ File
2622
25.83
-64.19% src/github.com/nats-io/nats-server/server/mqtt.go
760
63.36
-15.51% src/github.com/nats-io/nats-server/server/opts.go
489
70.55
-16.92% src/github.com/nats-io/nats-server/server/monitor.go
324
26.1
-64.54% src/github.com/nats-io/nats-server/server/msgtrace.go
290
87.73
0.1% src/github.com/nats-io/nats-server/server/consumer.go
289
81.03
-1.33% src/github.com/nats-io/nats-server/server/raft.go
248
84.05
-0.12% src/github.com/nats-io/nats-server/server/jetstream.go
239
70.95
-11.53% src/github.com/nats-io/nats-server/server/memstore.go
187
89.78
-3.78% src/github.com/nats-io/nats-server/server/client.go
183
74.57
-0.7% src/github.com/nats-io/nats-server/server/jetstream_api.go
124
0.0
-53.22% src/github.com/nats-io/nats-server/server/proto.go
122
52.8
-6.33% src/github.com/nats-io/nats-server/server/reload.go
102
81.91
-9.66% src/github.com/nats-io/nats-server/server/parser.go
89
82.16
0.25% src/github.com/nats-io/nats-server/server/jetstream_cluster.go
68
87.73
-2.29% src/github.com/nats-io/nats-server/server/leafnode.go
60
85.6
-0.85% src/github.com/nats-io/nats-server/server/stream.go
51
88.51
-1.3% src/github.com/nats-io/nats-server/server/server.go
42
6.67
-93.33% src/github.com/nats-io/nats-server/server/monitor_sort_opts.go
41
55.49
-22.53% src/github.com/nats-io/nats-server/server/log.go
39
85.61
-3.07% src/github.com/nats-io/nats-server/server/auth.go
37
64.02
-3.13% src/github.com/nats-io/nats-server/server/websocket.go
34
84.82
-1.58% src/github.com/nats-io/nats-server/server/events.go
33
35.38
-50.77% src/github.com/nats-io/nats-server/server/feature_flags.go
20
78.37
-0.17% src/github.com/nats-io/nats-server/server/filestore.go
15
86.47
-0.44% src/github.com/nats-io/nats-server/server/accounts.go
15
89.91
-1.25% src/github.com/nats-io/nats-server/server/sublist.go
14
9.56
-10.29% src/github.com/nats-io/nats-server/server/signal.go
12
82.8
-0.48% src/github.com/nats-io/nats-server/server/route.go
11
93.65
-0.36% src/github.com/nats-io/nats-server/server/gateway.go
8
76.96
-4.19% src/github.com/nats-io/nats-server/server/jwt.go
7
91.05
-0.9% src/github.com/nats-io/nats-server/server/jetstream_batching.go
4
56.68
0.18% src/github.com/nats-io/nats-server/server/jetstream_errors_generated.go
4
88.11
-1.23% src/github.com/nats-io/nats-server/server/util.go
2
72.46
-0.45% src/github.com/nats-io/nats-server/server/avl/seqset.go
1
80.25
-1.23% src/github.com/nats-io/nats-server/server/errors.go
Jobs
ID Job ID Ran Files Coverage
1 26079329094.1 19 May 2026 07:06AM UTC 64
77.16
GitHub Action Run
Source Files on build 26079329094
  • Tree
  • List 64
  • Changed 36
  • Source Changed 6
  • Coverage Changed 35
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #26079329094
  • 7094f953 on github
  • Prev Build on main (#26016392020)
  • Next Build on main (#26144494550)
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