chore(config): retire the two zenoh 1.9 removed routing keys - #325
Open
YuanYuYuan wants to merge 1 commit into
Open
chore(config): retire the two zenoh 1.9 removed routing keys#325YuanYuYuan wants to merge 1 commit into
YuanYuYuan wants to merge 1 commit into
Conversation
There was a problem hiding this comment.
Pull request overview
Updates peer networking defaults so hiroz nodes can communicate across hosts.
Changes:
- Binds peer sessions to all interfaces.
- Removes a deprecated router override.
- Adds default-session connectivity and configuration tests.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
crates/hiroz/src/config.rs |
Updates session and router defaults. |
crates/hiroz/tests/two_session_default_config.rs |
Tests independent default sessions and reachable listeners. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
YuanYuYuan
force-pushed
the
fix/config-cross-host-listen-endpoints
branch
from
August 24, 2026 18:37
34a2e00 to
3663bdd
Compare
YuanYuYuan
force-pushed
the
fix/config-cross-host-listen-endpoints
branch
3 times, most recently
from
August 25, 2026 08:28
1408f31 to
06e5501
Compare
YuanYuYuan
force-pushed
the
fix/config-cross-host-listen-endpoints
branch
2 times, most recently
from
August 25, 2026 10:25
9ce79a6 to
b02cb78
Compare
YuanYuYuan
force-pushed
the
fix/config-cross-host-listen-endpoints
branch
from
August 25, 2026 18:33
b02cb78 to
625cfaa
Compare
zenoh 1.9 removed routing.router.peers_failover_brokering. The runtime warns on every start of anything that sets it: WARN zenoh_config: `routing.router.peers_failover_brokering` is deprecated and has no effect; please remove it from your configuration hiroz set it twice, and the two disagreed. The library set false; the vendored rmw-zenoh-rs session config set true -- in a session config, where a key about router forwarding has no meaning even on a runtime that honoured it. Neither did anything. Measured on rmw_zenoh_cpp jazzy 0.2.9, where the key is still live: with one shared router and two peers across hosts, false delivers 0/75 and true delivers 75/75. So this was a real capability, and zenoh 1.9 took it away rather than retiring a dead flag. Both projects had already switched it off, and both default to a router per host, where the key has no role. The new test pins the absence rather than the deletion. A deprecated key compiles, validates, and produces a warning nobody reads.
YuanYuYuan
force-pushed
the
fix/config-cross-host-listen-endpoints
branch
from
August 25, 2026 19:02
625cfaa to
c34ee90
Compare
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.
Summary
zenoh 1.9 removed two config keys that hiroz still set.
zenoh-configcarries a deprecation wrapper for each, and warns on both.routing.router.peers_failover_brokeringcrates/hiroz/src/config.rs, router overridesfalserouting.router.peers_failover_brokeringcrates/rmw-zenoh-rs/config/…SESSION_CONFIG.json5truerouting.peer.mode"peer_to_peer"The two settings of the first key disagreed with each other. None of the three does anything. The runtime says so on every start of anything that sets it:
This change removes all three, and adds a test that pins their absence. With
routing.peergone the JSON5 file'sroutingblock held nothing live, so that goes too.The second one is also in the wrong file. It is a session config, and the key governs what a router does when forwarding between two peers attached to it. A session is not a router, so it would have had no effect there even on a runtime that honoured it.
What the key used to do, measured
The flag was real. It is still live on
rmw_zenoh_cppjazzy 0.2.9, where the same measurement runs both ways with one word changed in the router config:peers_failover_brokeringfalse(its shipped value)trueThe listener's own log gives the mechanism:
That the
falsecell scouted the talker proves both nodes shared a router. Gossip reached across; only the data path did not.So zenoh 1.9 removed a capability, not a dead option. Know that before deleting the key. It also deserves a line in whatever documents the upgrade.
Why removing it costs nothing here
connect/endpointsistcp/localhost:7447, so every node reaches a router on its own machinefalse,rmw_zenoh_cppfalseMeasured across topologies, hiroz delivers cross-host either way:
The shared-router row is a separate problem, and this change does not address it. This records it rather than fixing it, because a deployment reaches that row only by overriding the shipped connect endpoint.
What fails without this
Nothing fails. The keys are inert; that is the point.
the_shipped_overrides_name_no_removed_keypeers_failover_brokeringthe_vendored_config_files_set_no_removed_keyBoth assertions run in every direction: green as committed, then one red probe per key per surface — four in all, each returning rc=101. Each arm fires only on its own surface, so they are two independent checks rather than one written twice. Both also assert their input is non-empty, so neither can pass vacuously.
The two surfaces need different needles for the same key. An override spells it as a path,
routing/peer/mode; a JSON5 file spells it as nested blocks with the value on the leaf. An earlier version of this test used one token for both and would have missed the file side in silence.An earlier revision of that test asserted against
format!("{config:?}"). That renders zenoh's whole config tree, defaults included. It therefore could not tell an override from a field that merely exists, and it failed on a clean tree. It now inspectsrouter_overrides()andsession_overrides()— what hiroz sets.Test results
cargo test -p hirozon this branchcargo test -p hirozonmaincargo clippy -p hiroz --all-targets -- -D warningscargo fmt --checkThe 7 are pre-existing doctest compile failures in
action/client.rsandaction/server.rs(ZActionClient,ZActionClientBuilder,GoalHandle,ZActionServerBuilder). Confirmed againstmainrather than assumed.Breaking changes
None. Both keys are inert on zenoh 1.9, so no behaviour changes at any setting.
Not verified
hirozon zenoh 1.8. Every "the flag was live" number above comes fromrmw_zenoh_cppjazzy 0.2.9, which is a different stack. A true before-and-after needs hiroz pinned tozenoh = "1.8".libzenohc.socarries no symbols, and three probe strategies recovered no version string.