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

decentraland / archipelago-workers / 30665076602
93%
main: 79%

Build:
Build:
LAST BUILD BRANCH: chore/decommission-archipelago-core
DEFAULT BRANCH: main
Ran 31 Jul 2026 09:02PM UTC
Jobs 1
Files 39
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

31 Jul 2026 09:01PM UTC coverage: 92.49% (+13.9%) from 78.61%
30665076602

Pull #128

github

LautaroPetaccio
fix: release discarded fetch bodies and stop ban sweeps overlapping

Both raised in review.

Unconsumed response bodies. @dcl/fetch-component cancels the bodies it discards
internally and says why in its own source: an unconsumed undici body pins its
socket and buffers the received bytes until GC. It also hands ownership of the
returned response to the caller, and both adapters dropped it on the non-OK
path without reading or cancelling it.

The ban check is the one that matters: it runs on every WS handshake, so a
gatekeeper returning 5xx — the outage the fail-open exists to survive — would
pin a socket and buffer its bytes per connecting player, leaking worst exactly
when the system is already degraded. The deny list has the same bug bounded by
its 5 minute TTL, so at most one body per window. Both now cancel.

Overlapping ban sweeps. setInterval does not await an async callback, so a
sweep slower than the interval had the next one start on top of it. Each sweep
carries its own budget of BAN_SWEEP_CONCURRENCY in-flight checks, so overlapping
them multiplies load on comms-gatekeeper — and a slow gatekeeper is what makes a
sweep outrun its interval in the first place, so the pile-up compounds the
condition that caused it. Reachable rather than theoretical: a sweep takes up to
ceil(peers / 20) * 1s against the 1s per-check timeout, so it outruns the 30s
default past roughly 600 peers.

Guarded against re-entry, and the skip is logged: it means either the interval
is too short for the peer count or the ban check is degraded. A guard rather
than a self-scheduling setTimeout keeps the fixed cadence and the unref().

Both fixes are mutation-tested: removing either one kills exactly its own test.
Pull Request #128: feat: remove archipelago-core (clustering moves to Pulse)

102 of 127 branches covered (80.31%)

Branch coverage included in aggregate %.

192 of 195 new or added lines in 20 files covered. (98.46%)

563 of 592 relevant lines covered (95.1%)

8.32 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
92.0
stats/src/logic/subscriptions.ts
1
88.89
ws-connector/test/mocks/fetch-mock.ts
1
90.0
ws-connector/test/mocks/peers-registry-mock.ts
Jobs
ID Job ID Ran Files Coverage
1 30665076602.1 31 Jul 2026 09:02PM UTC 39
92.49
GitHub Action Run
Source Files on build 30665076602
  • Tree
  • List 39
  • Changed 5
  • Source Changed 5
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #30665076602
  • Pull Request #128
  • PR Base - main (#28120164718)
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