Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
7a13819
Zenoh: add weak_ptr holder structs and ZenohTeardownEntity helper
caguero May 15, 2026
043c1bc
Zenoh: subscriber holder dispatch and detached undeclare on teardown
caguero May 15, 2026
21b38c6
Zenoh: queryable holder dispatch, detached undeclare, safe RunCallbac…
caguero May 15, 2026
a579173
Zenoh: publisher release teardown to avoid undeclare blocking at exit
caguero May 15, 2026
0be5d86
Zenoh: add INTEGRATION_zenohShutdownStress test
caguero May 15, 2026
7f67726
Merge branch 'main' into caguero_zenoh_holder_shutdown
caguero May 19, 2026
f823e0e
Merge branch 'main' into caguero_zenoh_holder_shutdown
caguero May 26, 2026
eb93b0e
Merge branch 'main' into caguero_zenoh_holder_shutdown
caguero Jul 1, 2026
1656aa8
Refactor Zenoh handlers to use enable_shared_from_this; restore type …
caguero Jul 6, 2026
594f2b8
Zenoh: require zenoh >= 1.8.0
caguero May 15, 2026
ca0b7a5
Zenoh: cold start liveliness drain, persistent Querier cache, explici…
caguero May 15, 2026
b75ab2f
Zenoh: route service requests through cached Querier with user timeout
caguero May 15, 2026
09c3055
Zenoh: add INTEGRATION_twoProcsSrvCallLateResponder test
caguero May 15, 2026
ec9d365
Zenoh: drop no-op interests config override
caguero Jul 10, 2026
07e6e1c
Zenoh: undeclare cached queriers at shutdown instead of leaking
caguero Jul 10, 2026
311ddf7
Zenoh: make CreateZenohGet non-blocking, drop late replies via weak_ptr
caguero Jul 10, 2026
7176ddf
Zenoh: relax minimum version to 1.7.2, clean up CMake check
caguero Jul 10, 2026
7b2fc1e
Zenoh: undeclare publisher entities on destruction instead of leaking
caguero Jul 10, 2026
34176c6
SHM updates
caguero Mar 18, 2026
5402fa6
Remove old benchmark files superseded by example/benchmark/
caguero Mar 18, 2026
b8f3d41
Remove TX queue/congestion env vars, rename SHM env vars
caguero Apr 7, 2026
143a91f
Tweaks
caguero Apr 7, 2026
1bd2e98
Tweaks
caguero Apr 7, 2026
11830cd
Rename
caguero Apr 7, 2026
713dd8e
Tweak
caguero Apr 7, 2026
3214174
Tweaks
caguero Apr 7, 2026
a6dc9c0
ShmEnvConfig
caguero Apr 7, 2026
e5c3923
Tweaks
caguero Apr 7, 2026
51bbf52
Style
caguero Apr 7, 2026
fd97c03
Tweak
caguero Apr 7, 2026
d9c2b90
Do not use custom env for enable/disable shared memory
caguero Apr 7, 2026
7d66337
Tweak
caguero Apr 7, 2026
79c55a3
Tweaks
caguero Apr 7, 2026
205f4b7
Tweaks
caguero Apr 7, 2026
78c3315
Tweak
caguero Apr 7, 2026
1cde1d4
Tweak
caguero Apr 7, 2026
9995476
Show error messages
caguero Apr 7, 2026
03845bb
Tests
caguero Apr 7, 2026
847f5c1
Fix
caguero Apr 7, 2026
6c6b0cc
Tests
caguero Apr 7, 2026
4be7a18
Tweak
caguero Apr 7, 2026
b1669d7
Check env vars
caguero Apr 9, 2026
04d09d0
Style
caguero Apr 9, 2026
a9443d4
Clean
caguero Apr 13, 2026
7a34cf8
Tweak
caguero Apr 13, 2026
696a79c
Zenoh: create the centralized subscriber under the NodeShared mutex
caguero Jul 17, 2026
e53a808
Zenoh: make the SHM helpers compile when Zenoh lacks SHM support
caguero Jul 17, 2026
4c0afa0
Zenoh: degrade gracefully when the environment cannot provide SHM
caguero Jul 17, 2026
45e27d1
Zenoh: make CreateMsgFromBuffer ABI-stable via a message factory
caguero Jul 17, 2026
a2020fd
Zenoh: share one lazily-created SHM pool across the whole process
caguero Jul 17, 2026
d66bed1
Zenoh: harden config read, topic-list checks, and benchmark logging
caguero Jul 17, 2026
ca429b3
Merge #868 (Zenoh 1.8 part 2, includes #867) into the SHM branch
caguero Jul 18, 2026
4438027
Merge main into caguero-zenoh-shm
caguero Sep 10, 2026
3ad0d58
Document SHM build requirements in ShmHelpers.hh
caguero Sep 10, 2026
8d66b18
Merge branch 'main' into caguero-zenoh-shm
caguero Sep 11, 2026
ad22479
Use the Zenoh session's SHM provider and config keys for shared memory
caguero Sep 11, 2026
d1ca5c2
Benchmark Zenoh with shared memory disabled and with gz-transport def…
caguero Sep 11, 2026
c22692e
Treat a failed SHM provider initialization as final
caguero Sep 11, 2026
6b10e7d
Merge branch 'main' into caguero-zenoh-shm
caguero Sep 11, 2026
b0839a9
Own the Zenoh shared memory state in NodeSharedPrivate
caguero Sep 11, 2026
31a7a5f
Merge branch 'main' into caguero-zenoh-shm
caguero Sep 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ release will remove the deprecated code.
```
* [GitHub issue 773](https://github.com/gazebosim/gz-transport/issues/773)

1. `ISubscriptionHandler::CreateGenericZenohSubscriber()` has been renamed to
`CreateLivelinessToken()`. The old name is kept as a deprecated forwarding
function and will be removed in a future release.

### Removed

1. Removed zeromq from public header and CMake target. Specifically,
Expand Down
90 changes: 26 additions & 64 deletions example/benchmark/bench.cc
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,28 @@ class NoInputResponder
private: gz::transport::Node node;
};

//////////////////////////////////////////////////
/// \brief Log the transport configuration to a stream for reproducibility.
/// Always prints all fields (with defaults) so .dat files are
/// self-describing.
/// \param[in] _stream Destination stream.
void LogTransportConfig(std::ostream *_stream)
{
const char *impl = std::getenv("GZ_TRANSPORT_IMPLEMENTATION");
const char *zenohConfig = std::getenv("ZENOH_CONFIG");
const char *configOverride =
std::getenv("GZ_TRANSPORT_ZENOH_CONFIG_OVERRIDE");

(*_stream) << "# Backend: " << (impl ? impl : "zeromq (default)")
<< std::endl;
// Shared memory is governed by the Zenoh config
// (transport/shared_memory/*); record what may have changed it.
(*_stream) << "# Zenoh config: "
<< (zenohConfig ? zenohConfig : "default") << std::endl;
(*_stream) << "# Config override: "
<< (configOverride ? configOverride : "none") << std::endl;
}

/// \brief The PubTester is used to collect data on latency or throughput.
/// Latency is the measure of time from message publication to message
/// reception. Latency is calculated by dividing the complete roundtrip
Expand Down Expand Up @@ -555,24 +577,7 @@ class PubTester
<< std::endl;
#endif

// Log transport configuration for reproducibility.
// Always print all fields (with defaults) so .dat files are self-describing.
const char *impl = std::getenv("GZ_TRANSPORT_IMPLEMENTATION");
const char *shm = std::getenv("GZ_TRANSPORT_ZENOH_SHM");
const char *shmPool = std::getenv("GZ_TRANSPORT_ZENOH_SHM_POOL_SIZE");
const char *shmThresh = std::getenv("GZ_TRANSPORT_ZENOH_SHM_THRESHOLD");
const char *cc = std::getenv("GZ_TRANSPORT_ZENOH_CONGESTION_CONTROL");
const char *txq = std::getenv("GZ_TRANSPORT_ZENOH_TX_QUEUE_SIZE");

(*_stream) << "# Backend: " << (impl ? impl : "zeromq (default)")
<< std::endl;
(*_stream) << "# SHM: " << (shm ? shm : "enabled (default)") << std::endl;
(*_stream) << "# SHM pool: "
<< (shmPool ? shmPool : "10485760 (default)") << std::endl;
(*_stream) << "# SHM threshold: "
<< (shmThresh ? shmThresh : "131072 (default)") << std::endl;
(*_stream) << "# Congestion: " << (cc ? cc : "drop (default)") << std::endl;
(*_stream) << "# TX queue: " << (txq ? txq : "2 (default)") << std::endl;
LogTransportConfig(_stream);
(*_stream) << "# Iterations: " << this->sentMsgs
<< " Warmup: " << this->warmupIters << std::endl;
}
Expand Down Expand Up @@ -1080,22 +1085,7 @@ class SrvTester
<< std::endl;
#endif

const char *impl = std::getenv("GZ_TRANSPORT_IMPLEMENTATION");
const char *shm = std::getenv("GZ_TRANSPORT_ZENOH_SHM");
const char *shmPool = std::getenv("GZ_TRANSPORT_ZENOH_SHM_POOL_SIZE");
const char *shmThresh = std::getenv("GZ_TRANSPORT_ZENOH_SHM_THRESHOLD");
const char *cc = std::getenv("GZ_TRANSPORT_ZENOH_CONGESTION_CONTROL");
const char *txq = std::getenv("GZ_TRANSPORT_ZENOH_TX_QUEUE_SIZE");

(*_stream) << "# Backend: " << (impl ? impl : "zeromq (default)")
<< std::endl;
(*_stream) << "# SHM: " << (shm ? shm : "enabled (default)") << std::endl;
(*_stream) << "# SHM pool: "
<< (shmPool ? shmPool : "10485760 (default)") << std::endl;
(*_stream) << "# SHM threshold: "
<< (shmThresh ? shmThresh : "131072 (default)") << std::endl;
(*_stream) << "# Congestion: " << (cc ? cc : "drop (default)") << std::endl;
(*_stream) << "# TX queue: " << (txq ? txq : "2 (default)") << std::endl;
LogTransportConfig(_stream);
(*_stream) << "# Iterations: " << this->sentMsgs
<< " Warmup: " << this->warmupIters << std::endl;
}
Expand Down Expand Up @@ -1402,21 +1392,7 @@ class OneWaySrvTester
<< " " << unameData.version << " " << unameData.machine
<< std::endl;
#endif
const char *impl = std::getenv("GZ_TRANSPORT_IMPLEMENTATION");
const char *shm = std::getenv("GZ_TRANSPORT_ZENOH_SHM");
const char *shmPool = std::getenv("GZ_TRANSPORT_ZENOH_SHM_POOL_SIZE");
const char *shmThresh = std::getenv("GZ_TRANSPORT_ZENOH_SHM_THRESHOLD");
const char *cc = std::getenv("GZ_TRANSPORT_ZENOH_CONGESTION_CONTROL");
const char *txq = std::getenv("GZ_TRANSPORT_ZENOH_TX_QUEUE_SIZE");
(*_stream) << "# Backend: " << (impl ? impl : "zeromq (default)")
<< std::endl;
(*_stream) << "# SHM: " << (shm ? shm : "enabled (default)") << std::endl;
(*_stream) << "# SHM pool: "
<< (shmPool ? shmPool : "10485760 (default)") << std::endl;
(*_stream) << "# SHM threshold: "
<< (shmThresh ? shmThresh : "131072 (default)") << std::endl;
(*_stream) << "# Congestion: " << (cc ? cc : "drop (default)") << std::endl;
(*_stream) << "# TX queue: " << (txq ? txq : "2 (default)") << std::endl;
LogTransportConfig(_stream);
(*_stream) << "# Iterations: " << this->sentMsgs
<< " Warmup: " << this->warmupIters << std::endl;
}
Expand Down Expand Up @@ -1652,21 +1628,7 @@ class NoInputSrvTester
<< " " << unameData.version << " " << unameData.machine
<< std::endl;
#endif
const char *impl = std::getenv("GZ_TRANSPORT_IMPLEMENTATION");
const char *shm = std::getenv("GZ_TRANSPORT_ZENOH_SHM");
const char *shmPool = std::getenv("GZ_TRANSPORT_ZENOH_SHM_POOL_SIZE");
const char *shmThresh = std::getenv("GZ_TRANSPORT_ZENOH_SHM_THRESHOLD");
const char *cc = std::getenv("GZ_TRANSPORT_ZENOH_CONGESTION_CONTROL");
const char *txq = std::getenv("GZ_TRANSPORT_ZENOH_TX_QUEUE_SIZE");
(*_stream) << "# Backend: " << (impl ? impl : "zeromq (default)")
<< std::endl;
(*_stream) << "# SHM: " << (shm ? shm : "enabled (default)") << std::endl;
(*_stream) << "# SHM pool: "
<< (shmPool ? shmPool : "10485760 (default)") << std::endl;
(*_stream) << "# SHM threshold: "
<< (shmThresh ? shmThresh : "131072 (default)") << std::endl;
(*_stream) << "# Congestion: " << (cc ? cc : "drop (default)") << std::endl;
(*_stream) << "# TX queue: " << (txq ? txq : "2 (default)") << std::endl;
LogTransportConfig(_stream);
(*_stream) << "# Iterations: " << this->sentMsgs
<< " Warmup: " << this->warmupIters << std::endl;
}
Expand Down
8 changes: 5 additions & 3 deletions example/benchmark/plot_benchmark.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,12 @@
# Per-configuration display style. Order here determines legend order.
# Wong colorblind-safe palette — distinguishable by hue, even in greyscale.
STYLES: 'OrderedDict[str, dict]' = OrderedDict([
('zenoh',
{'label': 'Zenoh', 'color': '#009E73'}),
('zeromq',
{'label': 'ZeroMQ', 'color': '#0072B2'}),
{'label': 'ZeroMQ', 'color': '#0072B2'}),
('zenoh_no_shm',
{'label': 'Zenoh (SHM off)', 'color': '#D55E00'}),
('zenoh_shm',
{'label': 'Zenoh (SHM)', 'color': '#009E73'}),
])


Expand Down
29 changes: 23 additions & 6 deletions example/benchmark/run_benchmark.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,20 +75,37 @@
# clear: list of env var names to REMOVE
CONFIGS = [
{
'name': 'zenoh',
'description': 'Zenoh (default settings)',
'name': 'zeromq',
'description': 'ZeroMQ (default HWM=1000)',
'env': {
'GZ_TRANSPORT_IMPLEMENTATION': 'zeromq',
},
'clear': [
'GZ_TRANSPORT_ZENOH_CONFIG_OVERRIDE',
],
},
{
# Disables Zenoh's shared memory subsystem entirely, including its
# own transport optimization, so this is a pure network baseline
# rather than what a default gz-transport build does.
'name': 'zenoh_no_shm',
'description': 'Zenoh with shared memory disabled (network only)',
'env': {
'GZ_TRANSPORT_IMPLEMENTATION': 'zenoh',
'GZ_TRANSPORT_ZENOH_CONFIG_OVERRIDE':
'transport/shared_memory/enabled=false',
},
'clear': [],
},
{
'name': 'zeromq',
'description': 'ZeroMQ (default HWM=1000)',
'name': 'zenoh_shm',
'description': 'Zenoh with shared memory (gz-transport defaults)',
'env': {
'GZ_TRANSPORT_IMPLEMENTATION': 'zeromq',
'GZ_TRANSPORT_IMPLEMENTATION': 'zenoh',
},
'clear': [],
'clear': [
'GZ_TRANSPORT_ZENOH_CONFIG_OVERRIDE',
],
},
]

Expand Down
145 changes: 0 additions & 145 deletions example/cmake/FindZeroMQ.cmake

This file was deleted.

19 changes: 0 additions & 19 deletions example/data/14-11-2017-benchmarks/latency-interprocess.data

This file was deleted.

19 changes: 0 additions & 19 deletions example/data/14-11-2017-benchmarks/latency-intraprocess.data

This file was deleted.

17 changes: 0 additions & 17 deletions example/data/14-11-2017-benchmarks/latency-wireless.data

This file was deleted.

Loading
Loading