test(compat): add ceralive-srtla-send-rs blocking pair; docs: ADR-003 Rust sender adoption - #27
Merged
Merged
Conversation
… Rust sender adoption
Register the CERALIVE Rust fork (srtla-send-rs, ADR-003 cutover sender) as a
blocking compat pair against our C srtla_rec, and commit ADR-003.
matrix.yaml: new sender entry pinned to the v1.0.0 release tag (commit b867c7d)
with both-arch .deb SHA256s. It is a release-artifact pin (no Dockerfile), so it
carries no 'build:' key; gen-ci-matrix.sh --images skips it by design while
--pairs includes it. validate-matrix.py's blocking-pair count moves 6 -> 7.
run-matrix.sh: a new 'forkbin' sender kind resolves the pre-built binary from
SRTLA_SEND_RS_BIN (or a srtla_send_rs on PATH) and runs it like a local sender;
absent, the pair SKIPs like a missing Docker image. Mirrors the SRTLA_BUILD_DIR
override convention for 'ours'.
scenarios: made sender-agnostic so the same behavioral assertions validate both
the C sender and the Rust fork. The fork logs different wording and is silent
without RUST_LOG, so each sender launch now prefixes RUST_LOG=${RUST_LOG:-info}
(a no-op for the C sender) and the join/link-fail greps accept both vocabularies
(e.g. 'Added connection via IP' | 'added uplink ... via IP'; 'connection failed'
| 'timed out; attempting full socket reconnection'). Pass criteria are unchanged
-- the C sender still matches via the first alternative.
Verify: tests/compat/run-matrix.sh --tier blocking passes all 7 pairs incl. the
fork; --pair ceralive-send-rsxours --scenario port-mismatch still FAILS
(falsifiable); ctest is green (178/178).
Risks: the fork is silent without RUST_LOG -- removing the env prefix would blind
the scenario greps to it. jitter-stress's privileged netns path is environment-
sensitive and currently does not validate on every host for either sender.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Affected repo & language: srtla — Bash (compat harness/scenarios), YAML/Python (matrix registry), Markdown (docs/ADR)
What
Registers the CERALIVE Rust fork (
srtla-send-rs, the ADR-003 cutover sender) as a blocking compatibility pair against our Csrtla_rec, and commits ADR-003. The compat harness gains aforkbinsender kind that runs the fork's pre-built release binary (resolved fromSRTLA_SEND_RS_BIN, or asrtla_send_rson PATH). The five behavioral scenarios are made sender-agnostic so the same assertions validate both the C sender and the Rust fork.Why
ADR-003 adopts the Rust fork as the shipping
srtla_sendvia direct cutover. The cutover gate requires the fork to pass the blocking compat matrix against the C receiver, and the failure/stress scenarios must keep working once the C sender is retired from the.deb. The fork uses different log wording than the C sender and is silent withoutRUST_LOG, so the scenarios had to learn both vocabularies without weakening any pass criterion.How to verify
cmake -B build -DBUILD_COMPAT_TESTS=ON && cmake --build build -jgh release download v1.0.0 -R CERALIVE/srtla-send-rs --pattern "*amd64*.deb", verify SHA256803f0ed4…, extract/usr/bin/srtla_send.SRTLA_SEND_RS_BIN=<that binary> bash tests/compat/run-matrix.sh --tier blocking→ all 7 pairs PASS (incl.ceralive-send-rsxours).SRTLA_SEND_RS_BIN=… bash tests/compat/run-matrix.sh --pair ceralive-send-rsxours --scenario port-mismatch→ FAIL (exit 1).--build-dirat a dir whosesrtla_sendis the fork): receiver-restart, sighup-reload, link-drop, reorder-stress PASS.python3 tests/compat/validate-matrix.py→ PASS (7 blocking pairs).ctest --test-dir build→ 178/178 green.Risks
RUST_LOGis set; each scenario's sender launch prefixesRUST_LOG="${RUST_LOG:-info}"(a no-op for the C sender). Removing that prefix would blind the scenario greps to the fork.jitter-stress's privileged netns/netem path is environment-sensitive and does not validate cleanly on every host for either sender (the C baseline also fails it on the QA host: no second link / zero throughput). Its0-reapscriterion was left unrelaxed; the fork additionally exhibits socket-reconnection churn under ±200 ms jitter while keeping the bonded stream healthy (both links registered, disconnects==0). Tracked as a follow-up, not a cutover blocker..debSHA256 (package Version is3.0.0from the upstream Cargo.toml); pin by SHA/commit, not version.Checklist
AGENTS.mdCOMPAT section,docs/COMPATIBILITY.mdecosystem table, ADR-003 committedmain; branched offorigin/main(Rule B)git grep -n '.omo' -- ':!.gitignore'returns nothing (Rule D)