From dd318e4445413c573bf5f6fa7bcba78f6dc3452b Mon Sep 17 00:00:00 2001 From: CY Chen Date: Fri, 5 Jun 2026 19:48:14 +0000 Subject: [PATCH 1/2] Expose buffer backend metadata in rmw_zenoh graph endpoint info Signed-off-by: CY Chen --- rmw_zenoh_cpp/src/detail/graph_cache.cpp | 45 ++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/rmw_zenoh_cpp/src/detail/graph_cache.cpp b/rmw_zenoh_cpp/src/detail/graph_cache.cpp index d65e1e22..03592db3 100644 --- a/rmw_zenoh_cpp/src/detail/graph_cache.cpp +++ b/rmw_zenoh_cpp/src/detail/graph_cache.cpp @@ -27,8 +27,11 @@ #include "rcpputils/find_and_replace.hpp" #include "rcpputils/scope_exit.hpp" +#include "rcutils/error_handling.h" #include "rcutils/strdup.h" +#include "rcutils/types/string_map.h" +#include "rmw/convert_rcutils_ret_to_rmw_ret.h" #include "rmw/error_handling.h" #include "rmw/sanity_checks.h" #include "rmw/validate_namespace.h" @@ -1163,6 +1166,48 @@ rmw_ret_t GraphCache::get_entities_info_by_topic( return ret; } + auto entity_topic_info = entity->topic_info(); + if (entity_topic_info.has_value() && + entity_topic_info->backend_metadata_.has_value() && + !entity_topic_info->backend_metadata_->empty()) + { + rcutils_string_map_t buffer_backend_metadata = + rcutils_get_zero_initialized_string_map(); + rcutils_ret_t rc_ret = rcutils_string_map_init( + &buffer_backend_metadata, + entity_topic_info->backend_metadata_->size(), + *allocator); + if (RCUTILS_RET_OK != rc_ret) { + RMW_SET_ERROR_MSG(rcutils_get_error_string().str); + rcutils_reset_error(); + return rmw_convert_rcutils_ret_to_rmw_ret(rc_ret); + } + + for (const auto & backend_pair : entity_topic_info->backend_metadata_.value()) { + rc_ret = rcutils_string_map_set( + &buffer_backend_metadata, + backend_pair.first.c_str(), + backend_pair.second.c_str()); + if (RCUTILS_RET_OK != rc_ret) { + rcutils_ret_t fini_ret = rcutils_string_map_fini(&buffer_backend_metadata); + (void)fini_ret; + RMW_SET_ERROR_MSG(rcutils_get_error_string().str); + rcutils_reset_error(); + return rmw_convert_rcutils_ret_to_rmw_ret(rc_ret); + } + } + + ret = rmw_topic_endpoint_info_set_buffer_backend_metadata( + &ep, + &buffer_backend_metadata, + allocator); + rcutils_ret_t fini_ret = rcutils_string_map_fini(&buffer_backend_metadata); + (void)fini_ret; + if (RMW_RET_OK != ret) { + return ret; + } + } + rosidl_type_hash_t type_hash; rcutils_ret_t rc_ret = rosidl_parse_type_hash_string( topic_data->info_.type_hash_.c_str(), From 737cb377262d063c264c26d1967499e6f73ed051 Mon Sep 17 00:00:00 2001 From: CY Chen Date: Wed, 1 Jul 2026 13:58:13 +0000 Subject: [PATCH 2/2] Serialize Zenoh buffer backend metadata in endpoint info Signed-off-by: CY Chen --- rmw_zenoh_cpp/src/detail/graph_cache.cpp | 46 ++++++------------------ 1 file changed, 11 insertions(+), 35 deletions(-) diff --git a/rmw_zenoh_cpp/src/detail/graph_cache.cpp b/rmw_zenoh_cpp/src/detail/graph_cache.cpp index 03592db3..6ced8c2a 100644 --- a/rmw_zenoh_cpp/src/detail/graph_cache.cpp +++ b/rmw_zenoh_cpp/src/detail/graph_cache.cpp @@ -29,10 +29,9 @@ #include "rcutils/error_handling.h" #include "rcutils/strdup.h" -#include "rcutils/types/string_map.h" -#include "rmw/convert_rcutils_ret_to_rmw_ret.h" #include "rmw/error_handling.h" +#include "rmw/impl/cpp/buffer_backend_metadata.hpp" #include "rmw/sanity_checks.h" #include "rmw/validate_namespace.h" #include "rmw/validate_node_name.h" @@ -1171,41 +1170,18 @@ rmw_ret_t GraphCache::get_entities_info_by_topic( entity_topic_info->backend_metadata_.has_value() && !entity_topic_info->backend_metadata_->empty()) { - rcutils_string_map_t buffer_backend_metadata = - rcutils_get_zero_initialized_string_map(); - rcutils_ret_t rc_ret = rcutils_string_map_init( - &buffer_backend_metadata, - entity_topic_info->backend_metadata_->size(), - *allocator); - if (RCUTILS_RET_OK != rc_ret) { - RMW_SET_ERROR_MSG(rcutils_get_error_string().str); - rcutils_reset_error(); - return rmw_convert_rcutils_ret_to_rmw_ret(rc_ret); - } - - for (const auto & backend_pair : entity_topic_info->backend_metadata_.value()) { - rc_ret = rcutils_string_map_set( - &buffer_backend_metadata, - backend_pair.first.c_str(), - backend_pair.second.c_str()); - if (RCUTILS_RET_OK != rc_ret) { - rcutils_ret_t fini_ret = rcutils_string_map_fini(&buffer_backend_metadata); - (void)fini_ret; - RMW_SET_ERROR_MSG(rcutils_get_error_string().str); - rcutils_reset_error(); - return rmw_convert_rcutils_ret_to_rmw_ret(rc_ret); + const std::string buffer_backend_metadata = + rmw::impl::cpp::serialize_buffer_backend_metadata( + entity_topic_info->backend_metadata_.value()); + if (!buffer_backend_metadata.empty()) { + ret = rmw_topic_endpoint_info_set_buffer_backend_metadata( + &ep, + buffer_backend_metadata.c_str(), + allocator); + if (RMW_RET_OK != ret) { + return ret; } } - - ret = rmw_topic_endpoint_info_set_buffer_backend_metadata( - &ep, - &buffer_backend_metadata, - allocator); - rcutils_ret_t fini_ret = rcutils_string_map_fini(&buffer_backend_metadata); - (void)fini_ret; - if (RMW_RET_OK != ret) { - return ret; - } } rosidl_type_hash_t type_hash;