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

evolution-gaming / nats-effect / 36411777915
59%

Build:
DEFAULT BRANCH: master
Ran 28 Sep 2026 10:49AM UTC
Jobs 2
Files 57
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

28 Sep 2026 10:47AM UTC coverage: 58.525% (+1.3%) from 57.22%
36411777915

push

github

web-flow
Skip stale JetStream pull statuses in paced consumer (#25)

* Fix the paced engine's 500ms idle-window latency spikes by skipping stale pull statuses

The engine arms its local window deadline when a pull is published, while the
server starts the same expiresIn clock only on receipt, so on an idle consumer
the client always timed out first and the server's routine 408 for the
just-expired pull arrived at the head of the next window. There it looked like
a terminus arriving a full window early - a dead consumer answering instantly -
and tripped the 500ms EarlyEmptyGuard: a non-draining guard sleep (delaying
anything published meanwhile by up to 500ms) and a redundant second pull, every
window, on a perfectly healthy consumer.

Statuses are now matched to the pull they answer: jnats publishes every pull
request with a distinct reply subject, and the transport takes that subject
from the internal jnats call that computes it (pullReturningSubject in the
io.nats.client.impl package object, following the existing NatsKeyValue
precedent there), skipping any status that does not answer the current pull -
the same subject matching jnats's own sync fetch path uses. A stale status can
no longer end (or fail) the live pull's window, whatever the round trip or
scheduling delays. Genuine early termini (e.g. a deleted consumer answering
the fresh pull instantly) still carry the current pull's subject and still hit
the guard.

No API or configuration change; stop/reconnect timing is unchanged; the
callback engine is unaffected.

* Take already-buffered messages without the per-take timeout in the paced engine. (#23)

* Exclude the internal PacedPullEngine from binary compatibility checks

---------

Co-authored-by: Ilya Surkov <isurkov@evolution.com>
Co-authored-by: Andrei Ivaniuk <aivaniuk@evolution.com>

262 of 486 branches covered (53.91%)

Branch coverage included in aggregate %.

960 of 1602 relevant lines covered (59.93%)

0.92 hits per line

Coverage Regressions

Lines Coverage ∆ File
4
93.13
4.57% com/evolution/natseffect/jetstream/impl/PacedPullEngine.scala
2
77.78
-4.04% io/nats/client/impl/package.scala
1
97.73
0.76% com/evolution/natseffect/jetstream/impl/BufferedPullTransport.scala
Jobs
ID Job ID Ran Files Coverage
1 Scala 2.13.18 - 36411777915.1 28 Sep 2026 10:49AM UTC 53
46.56
GitHub Action Run
2 Scala 3.3.8 - 36411777915.2 28 Sep 2026 10:49AM UTC 57
51.03
GitHub Action Run
Source Files on build 36411777915
  • Tree
  • List 57
  • Changed 4
  • Source Changed 0
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #36411777915
  • f2cd7611 on github
  • Prev Build on master (#36406690534)
  • Next Build on master (#36423203079)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc