Files
Zhuolun Li 31e441de97 Ping every connection until traffic starts (#43)
quic closes a connection after 30s of silence and there is nothing to gossip about
before the first message, so an idle cold start dropped every connection outside the
mesh. Ping now covers every connection at 20s, under the timeout, and stops once 
messages arrive because gossip reaches each peer every few seconds by then.
2026-08-12 10:47:43 +01:00
..

Regression test node

Node for nim-libp2p regression campaigns. Dockerfile_amd64 builds the static cluster binary; Dockerfile_amd64_shadow builds the dynamic one for Shadow (its syscall interposer only hooks dynamically linked ELFs).

The lsquic tick-floor patch (Shadow + quic only)

lsquic-tick-floor.patch, applied by Dockerfile_amd64_shadow, is the reason quic runs under Shadow at all. lsquic re-arms its engine tick with a zero delay; in a discrete-event simulator that self-rescheduling timer never lets simulated time advance, so the run livelocks at one instant. mplex and yamux are fine.

The patch floors the re-arm interval, gated by LSQUIC_TICK_FLOOR_US (unset/0 = stock, so the image is safe on the cluster too; campaigns use 10000, 10 ms). es_clock_granularity is a real lsquic setting, but the essential change floors nim-lsquic's own chronos re-arm, which has no upstream knob; the durable fix is exposing both upstream in nim-lsquic.

Maintaining the patch

It targets lsquic 0.5.4's layout, pinned in test_node.nimble. nimble c re-resolves deps before compiling, so the Dockerfile patches the package cache (~/.nimble/pkgcache, what nimble copies from) rather than the installed copy. The build asserts it patched something and greps the binary for LSQUIC_TICK_FLOOR_US, so a stock build or a stale pin fails loudly.