From 76145a732ada700c36ce9ac69b321b8abaa1e4bf Mon Sep 17 00:00:00 2001 From: Natesh Narain Date: Fri, 6 Mar 2026 22:26:57 -0500 Subject: [PATCH 1/3] Fix exceptions getting bulk_data.categories and plugins at startup --- src/ros2_medkit_gateway/config/gateway_params.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ros2_medkit_gateway/config/gateway_params.yaml b/src/ros2_medkit_gateway/config/gateway_params.yaml index 3af7d64d..17bba838 100644 --- a/src/ros2_medkit_gateway/config/gateway_params.yaml +++ b/src/ros2_medkit_gateway/config/gateway_params.yaml @@ -273,7 +273,7 @@ ros2_medkit_gateway: # Allowed bulk data categories (besides "rosbags" which is always # available via FaultManager) # Example: ["calibration", "firmware", "comlogs", "snapshots"] - categories: [] + categories: [""] # Plugin Framework # Extend gateway with custom plugins loaded from shared libraries (.so). @@ -291,7 +291,7 @@ ros2_medkit_gateway: # Plugin lifecycle: load -> configure -> set_context -> register_routes # Plugins that throw during any lifecycle call are disabled (not crashed). # Default: [] (no plugins) - plugins: [] + plugins: [""] # Software Updates # Enables /updates endpoints for SOVD-compliant software update management. From 923ad66aab5108ab268b7a7e8d89ba8dff3f06f6 Mon Sep 17 00:00:00 2001 From: Natesh Narain Date: Sat, 7 Mar 2026 00:00:36 -0500 Subject: [PATCH 2/3] remove empty strings before processing --- src/ros2_medkit_gateway/src/gateway_node.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/ros2_medkit_gateway/src/gateway_node.cpp b/src/ros2_medkit_gateway/src/gateway_node.cpp index 234e42b7..9d6b093f 100644 --- a/src/ros2_medkit_gateway/src/gateway_node.cpp +++ b/src/ros2_medkit_gateway/src/gateway_node.cpp @@ -426,6 +426,10 @@ GatewayNode::GatewayNode() : Node("ros2_medkit_gateway") { auto bd_storage_dir = get_parameter("bulk_data.storage_dir").as_string(); auto bd_max_upload = static_cast(get_parameter("bulk_data.max_upload_size").as_int()); auto bd_categories = get_parameter("bulk_data.categories").as_string_array(); + bd_categories.erase( + std::remove_if(bd_categories.begin(), bd_categories.end(), [](const auto & item) { return item.empty(); }), + bd_categories.end()); + bulk_data_store_ = std::make_unique(bd_storage_dir, bd_max_upload, bd_categories); RCLCPP_INFO(get_logger(), "Bulk data store: dir=%s, max_upload=%zuB, categories=%zu", bd_storage_dir.c_str(), bd_max_upload, bd_categories.size()); @@ -438,6 +442,9 @@ GatewayNode::GatewayNode() : Node("ros2_medkit_gateway") { // Initialize plugin manager plugin_mgr_ = std::make_unique(); auto plugin_names = get_parameter("plugins").as_string_array(); + plugin_names.erase( + std::remove_if(plugin_names.begin(), plugin_names.end(), [](const auto & item) { return item.empty(); }), + plugin_names.end()); if (!plugin_names.empty()) { std::vector configs; // Plugin name validation: alphanumeric, underscore, hyphen only (max 256 chars) From 48936730e58275b19b409d3bb234cb7775d1465e Mon Sep 17 00:00:00 2001 From: Natesh Narain Date: Sat, 7 Mar 2026 11:26:57 +0000 Subject: [PATCH 3/3] clang format --- src/ros2_medkit_gateway/src/gateway_node.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/ros2_medkit_gateway/src/gateway_node.cpp b/src/ros2_medkit_gateway/src/gateway_node.cpp index 9d6b093f..bd0447d6 100644 --- a/src/ros2_medkit_gateway/src/gateway_node.cpp +++ b/src/ros2_medkit_gateway/src/gateway_node.cpp @@ -426,9 +426,11 @@ GatewayNode::GatewayNode() : Node("ros2_medkit_gateway") { auto bd_storage_dir = get_parameter("bulk_data.storage_dir").as_string(); auto bd_max_upload = static_cast(get_parameter("bulk_data.max_upload_size").as_int()); auto bd_categories = get_parameter("bulk_data.categories").as_string_array(); - bd_categories.erase( - std::remove_if(bd_categories.begin(), bd_categories.end(), [](const auto & item) { return item.empty(); }), - bd_categories.end()); + bd_categories.erase(std::remove_if(bd_categories.begin(), bd_categories.end(), + [](const auto & item) { + return item.empty(); + }), + bd_categories.end()); bulk_data_store_ = std::make_unique(bd_storage_dir, bd_max_upload, bd_categories); RCLCPP_INFO(get_logger(), "Bulk data store: dir=%s, max_upload=%zuB, categories=%zu", bd_storage_dir.c_str(), @@ -442,9 +444,11 @@ GatewayNode::GatewayNode() : Node("ros2_medkit_gateway") { // Initialize plugin manager plugin_mgr_ = std::make_unique(); auto plugin_names = get_parameter("plugins").as_string_array(); - plugin_names.erase( - std::remove_if(plugin_names.begin(), plugin_names.end(), [](const auto & item) { return item.empty(); }), - plugin_names.end()); + plugin_names.erase(std::remove_if(plugin_names.begin(), plugin_names.end(), + [](const auto & item) { + return item.empty(); + }), + plugin_names.end()); if (!plugin_names.empty()) { std::vector configs; // Plugin name validation: alphanumeric, underscore, hyphen only (max 256 chars)