Commit Graph
125 Commits
Author SHA1 Message Date
Alberto Soutullo 118c51d3da Simplify Dockerfiles, split bootstrap code, update readme 2026-08-25 19:55:12 +02:00
Alberto Soutullo 2ababda09a Merge remote-tracking branch 'refs/remotes/origin/Alan/listen-routable-interface' into Alberto/regression 2026-08-18 12:26:52 +02:00
Alberto Soutullo 4e1ee40843 Delete ms echo log 2026-08-18 11:24:16 +02:00
Alberto Soutullo 5c1796e28a Move ping protocol to every node 2026-08-18 11:23:55 +02:00
Alberto Soutullo f4d3c92876 Fix compilation issues 2026-08-18 11:23:41 +02:00
Alberto Soutullo f0efc01d85 Update version 2026-08-18 11:23:13 +02:00
radiken ea50fcb3eb Shorten the listenHost comment 2026-08-13 02:35:50 +01:00
radiken 39cd3e1bcb regression: listen on the routable interface, not 0.0.0.0
Listening on 0.0.0.0 makes libp2p announce every local address with loopback first,
so peers spend a dial attempt reaching themselves. That cost nothing while dials
were unbounded; nim-libp2p now bounds a dial and shares one deadline across the
whole address list, so it can exhaust the budget before the real address is tried.

The metrics and publish servers still bind 0.0.0.0, so in-pod probing is unchanged.

(cherry picked from commit 137cf9dad4)
2026-08-13 02:31:43 +01:00
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
Zhuolun Li 53d771c5ec Shadow quic: floor lsquic engine tick re-arms (#42)
Patch a floor onto the lsquic re-arm, switched at runtime by LSQUIC_TICK_FLOOR_US.
2026-07-27 10:44:52 +01:00
Zhuolun Li 4d13917799 Stagger bootstrap dial by pod index instead of a flat start sleep (#41)
Replace the flat STARTSLEEP (default 180s) wait before a normal node dials
the bootstrap with a small per-pod delay (pod index * STARTUP_JITTER_STEP_MS,
default 50ms).
2026-07-17 09:32:54 +01:00
Zhuolun Li 2ff22f99f5 Speed up regression node build: drop unused ggplotnim, merge apt layers (#39)
remove ggplotnim and merge apt-get for faster build
2026-06-26 09:48:18 +01:00
Zhuolun Li e4ec33715a Form regression mesh via kad-dht instead of static connectTo (#37)
Form regression mesh via kad-dht instead of static connectTo
2026-06-22 02:33:36 +01:00
Zhuolun Li a9e170882b Shadow base requester (#36)
bake pod-api-requester into the base Shadow image
2026-06-17 17:45:14 +01:00
Alberto Soutullo db424d8228 Merge pull request #35 from vacp2p/connectivity-issues
Service Discovery connectivity issues fix
2026-06-17 16:31:42 +02:00
Alberto Soutullo 1816e739af Fix wrong variable name 2026-06-17 16:19:43 +02:00
Alberto Soutullo 1efeb01f67 Update nim to 2.2.4 2026-06-17 12:19:20 +02:00
Alberto Soutullo 52455a92e0 Add number of maximum bootstrap connections 2026-06-17 12:07:21 +02:00
Gabriel Cruz bda50dbde6 chore: do not manually start disco 2026-06-15 09:20:36 +02:00
Alberto Soutullo 4ed93f5728 Update nimlibp2p version in nimble file 2026-06-09 15:22:26 +02:00
Alberto Soutullo 8f73a401c6 Add log lines 2026-06-09 15:22:25 +02:00
Alberto Soutullo de8611d0e5 Decrease startup jitter to 10 ms 2026-06-09 11:37:28 +02:00
Alberto Soutullo 72e3c67dfd Beter log all arguments 2026-06-09 11:37:13 +02:00
Alberto Soutullo ef0e15e2eb Add env variable for max connections 2026-06-09 11:36:56 +02:00
Alberto Soutullo cc47aef31c Merge pull request #33 from vacp2p/ping-util
Ping in regression node
2026-06-09 09:46:03 +02:00
Alberto Soutullo 7fcad75d3a Fix stream closing error for mplex 2026-06-08 09:22:23 +02:00
Alberto Soutullo e82528834a Add debug lines 2026-06-05 12:34:54 +02:00
Alberto Soutullo afbe0a35c4 Add ping util 2026-06-05 11:33:57 +02:00
Zhuolun LiandClaude Opus 4.7 ec1d9a9b62 Shadow runner base image with dynamic test-node build and configurable metrics interval (#28)
* shadow: add k8s-based runner setup

Adds a containerized Shadow runner so the existing single-machine prototype
(shadow/{topogen.py,run.sh,*.awk}) can execute on a lab worker without SSH.

- shadow/Dockerfile: multi-stage build — nim test-node `main` (mirrors
  nim-test-node/Dockerfile_amd64) + Ubuntu 22.04 runner with Shadow v3.3.0
  built from source (rustup + cmake/glib deps).
- shadow/k8s-job.yaml: Job pinned to node-05 in zerotesting-shadow, with
  seccomp Unconfined + SYS_PTRACE for Shadow's syscall interposition.
- shadow/kaniko-build-job.yaml: in-cluster image build via kaniko on node-04
  (avoids 30+ min QEMU emulation on arm64 macs); pushes to
  radiken/dst-shadow-nim.
- .dockerignore at repo root: keeps the buildx context lean for the new
  root-context Shadow build; per-experiment builds under nim-test-node/ are
  unaffected.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* shadow: fix kaniko git context branch case

GitHub branch refs are case-sensitive server-side. The branch landed as
Alan/shadow-k8s (capital A, matching team convention), but the manifest
referenced lowercase.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* shadow: add python3-yaml to the runner image

topogen.py imports yaml; without python3-yaml the sim aborts at
ModuleNotFoundError before generating shadow.yaml.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* shadow: build nim test node dynamically for Shadow runner

The k8s test-node build links the nim main fully static (-static -mmusl,
-static-libgcc, -static-libstdc++) for container portability. Shadow won't
accept a static binary because its syscall interposer is LD_PRELOAD-based,
which only hooks dynamically linked ELFs. Smoke test confirmed:

  Failed to verify plugin path '/tmp/t2/main'
  Caused by: not a dynamically linked ELF

Drop the static linker flags in the Shadow stage of the Dockerfile so the
nim main ends up dynamically linked against the runner image's glibc /
libssl3 / libstdc++. The k8s build (nim-test-node/Dockerfile_amd64) is
unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* shadow: split runner image into base + per-experiment test-node

Until now we baked the nim test-node main binary into the Shadow runner
image. That couples the generic Shadow runtime to one specific test node
and means rebuilding the whole image (Rust + Shadow) any time the nim
source changes.

Split into two images:

- radiken/dst-shadow-base: Ubuntu 22.04 + Shadow v3.3.0 + python deps.
  No nim binary. Built rarely. shadow/Dockerfile.
- radiken/dst-test-node-shadow: dynamic-linked nim main, two-stage build
  with debian:bookworm-slim final stage. nim-test-node/Dockerfile_amd64_shadow.

Per-run Job specs use an init container to copy /node/main out of the
test-node image into an emptyDir, then run shadow from the base image with
the binary + shadow.yaml mounted in. Decouples the Shadow runtime from the
per-experiment binary.

Two kaniko Job manifests (shadow/kaniko-build-job.yaml and
shadow/kaniko-build-test-node-job.yaml), both pinned to node-04.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* shadow: bake python3-requests into base for the publisher host

The Shadow runner pod runs traffic_sync.py (mounted via ConfigMap) as a
publisher host inside shadow.yaml. traffic_sync.py uses the requests
library, which isn't in the upstream python3 package. Bake it in once
rather than apt-installing at every run start.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* test-node: make storeMetrics scrape interval configurable

storeMetrics (used in Shadow mode to curl /metrics into metrics_pod-N.txt)
was hardcoded to a 5-minute interval. Shadow sims run for seconds-to-minutes
of simulated time, so a single scrape fires at t~=0 (before the mesh forms)
and the run ends before the next one. The captured libp2p_network_bytes
counter is therefore ~0 and useless for bandwidth comparison.

Add METRICS_INTERVAL_S env var (default 300 to preserve k8s behavior).
Shadow runs set it short (e.g. 15s) so the last scrape captures the
post-traffic cumulative byte counts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* shadow: drop superseded k8s-job.yaml, fix stale image comment

k8s-job.yaml was the old single-image by-hand runner manifest pointing at the
retired radiken/dst-shadow-nim image; the runner Job is now generated by
10ksim's builders. Also fix a kaniko comment that still named dst-shadow-nim.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix comments

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 10:09:43 +01:00
Alberto Soutullo cec0dbe8b1 Merge pull request #32 from vacp2p/v2-update
Update node to match v2.0.0
2026-06-01 13:52:24 +02:00
Alberto Soutullo f1ef4433fa Add start sleep parameter 2026-06-01 12:17:48 +02:00
Alberto Soutullo f22ab2d58a Remove mix related params 2026-06-01 12:12:10 +02:00
Alberto Soutullo 881b3b646c Add missing rng 2026-06-01 12:02:33 +02:00
Alberto Soutullo dd8f83f0a4 Update node to match v2.0.0 2026-06-01 12:02:33 +02:00
Alberto Soutullo 054e93f417 Merge pull request #30 from vacp2p/remove-mix
Remove mix from regression node
2026-06-01 12:01:01 +02:00
Alberto Soutullo f2e0286b03 Remove mix from regression node 2026-06-01 11:55:21 +02:00
Alberto Soutullo 67f252702d Merge pull request #29 from vacp2p/regression-folder
Move regression node to its own folder
2026-06-01 09:38:57 +02:00
Alberto Soutullo 7ccb77181a Move regression node to its own folder 2026-05-29 14:48:08 +02:00
Alberto Soutullo 233ae32d99 Merge pull request #27 from vacp2p/Alberto/service_discovery
Service discovery node
2026-05-27 11:39:39 +02:00
Alberto SoutulloandZhuolun Li 74c2342846 Apply suggestions from code review
Co-authored-by: Zhuolun Li <44989482+radiken@users.noreply.github.com>
2026-05-27 11:28:20 +02:00
Mamoutou DIARRA 814eb683e5 Merge pull request #25 from vacp2p/Mamoutou/gossip_queues
Add Node and Publisher for Priority Queues tests
(Merged after signing all past commits)
2026-05-26 11:51:47 +02:00
mamoutou-diarra e4d6066c3c remove mix and publisher 2026-05-26 11:45:51 +02:00
mamoutou-diarra 8c174e78e7 add per node load mode 2026-05-26 11:45:50 +02:00
mamoutou-diarra 95d9e525c8 remove nimble.paths 2026-05-26 11:45:50 +02:00
mamoutou-diarra 4f355e449f remove nimble.paths 2026-05-26 11:45:50 +02:00
mamoutou-diarra ec7b5d0623 add new publisher for gossip queues overflow tests 2026-05-26 11:45:50 +02:00
mamoutou-diarra 0d41340741 fix dst_* labels issues 2026-05-26 11:45:49 +02:00
mamoutou-diarra b5aa3c1d44 add muxer and peer_id labels to dst_* metrics 2026-05-26 11:45:49 +02:00
mamoutou-diarra a380e49d2c remove mix and wait 15s instead 5s for mesh creation 2026-05-26 11:45:49 +02:00
Alberto Soutullo b99e72fec5 Remove nimble.paths 2026-05-25 13:19:36 +02:00