From 06ee60c23805492bafc862d6f29a70431689b84d Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Mon, 2 Jun 2025 19:20:57 +0300 Subject: [PATCH 1/5] api: Coroutinize get_live_endpoint() To be summetrical with its get_down_endpoint() peer and to make further patching simpler. Signed-off-by: Pavel Emelyanov --- api/gossiper.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/api/gossiper.cc b/api/gossiper.cc index b1c756c853..1a9788ea2e 100644 --- a/api/gossiper.cc +++ b/api/gossiper.cc @@ -25,10 +25,9 @@ void set_gossiper(http_context& ctx, routes& r, gms::gossiper& g) { }); - httpd::gossiper_json::get_live_endpoint.set(r, [&g] (std::unique_ptr req) { - return g.get_live_members_synchronized().then([] (auto res) { - return make_ready_future(container_to_vec(res)); - }); + httpd::gossiper_json::get_live_endpoint.set(r, [&g] (std::unique_ptr req) -> future { + auto res = co_await g.get_live_members_synchronized(); + co_return json::json_return_type(container_to_vec(res)); }); httpd::gossiper_json::get_endpoint_downtime.set(r, [&g] (std::unique_ptr req) -> future { From 6809ab51988ea2008606ded76712ae7ad436cdb3 Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Mon, 2 Jun 2025 19:17:29 +0300 Subject: [PATCH 2/5] api: Use db::config::data_file_directories()' vector directly The return value is std::vector, there's no need to additionally convert it to std::vector. Signed-off-by: Pavel Emelyanov --- api/config.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/config.cc b/api/config.cc index 950391eeb2..bf06bc6184 100644 --- a/api/config.cc +++ b/api/config.cc @@ -187,7 +187,7 @@ void set_config(std::shared_ptr < api_registry_builder20 > rb, http_context& ctx }); ss::get_all_data_file_locations.set(r, [&cfg](const_req req) { - return container_to_vec(cfg.data_file_directories()); + return cfg.data_file_directories(); }); ss::get_saved_caches_location.set(r, [&cfg](const_req req) { From b943902ff7234a13145283d542e5487a550b8c2e Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Mon, 2 Jun 2025 19:17:47 +0300 Subject: [PATCH 3/5] api: Use std::ranges to convert std::set to std::vector The column_family/get_sstables_for_key endpoint collects a set of sstable names and converts it to vector of strings using homebrew helper. The std::ranges convertor works just as nice. Signed-off-by: Pavel Emelyanov --- api/column_family.cc | 2 +- api/token_metadata.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/column_family.cc b/api/column_family.cc index badf3d6a1d..bee39b9925 100644 --- a/api/column_family.cc +++ b/api/column_family.cc @@ -1050,7 +1050,7 @@ void set_column_family(http_context& ctx, routes& r, sharded& res) { - return make_ready_future(container_to_vec(res)); + return make_ready_future(res | std::ranges::to()); }); }); diff --git a/api/token_metadata.cc b/api/token_metadata.cc index 081388d329..3b2e9de004 100644 --- a/api/token_metadata.cc +++ b/api/token_metadata.cc @@ -59,7 +59,7 @@ void set_token_metadata(http_context& ctx, routes& r, sharded addr; - return container_to_vec(addr); + return addr | std::ranges::to(); }); ss::get_joining_nodes.set(r, [&tm, &g](const_req req) { From f6afc029511130894b1827f6184f5768aa513bc8 Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Mon, 2 Jun 2025 20:06:52 +0300 Subject: [PATCH 4/5] api: Use std::ranges to stringify collections There are several endpoints that have collection of objects at hand and want a vector of corresponding strings. Use std::ranges library for conversion. Signed-off-by: Pavel Emelyanov --- api/gossiper.cc | 4 ++-- api/storage_service.cc | 4 ++-- api/token_metadata.cc | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api/gossiper.cc b/api/gossiper.cc index 1a9788ea2e..7c1d3991b9 100644 --- a/api/gossiper.cc +++ b/api/gossiper.cc @@ -21,13 +21,13 @@ using namespace json; void set_gossiper(http_context& ctx, routes& r, gms::gossiper& g) { httpd::gossiper_json::get_down_endpoint.set(r, [&g] (std::unique_ptr req) -> future { auto res = co_await g.get_unreachable_members_synchronized(); - co_return json::json_return_type(container_to_vec(res)); + co_return json::json_return_type(res | std::views::transform([] (auto& ep) { return fmt::to_string(ep); }) | std::ranges::to()); }); httpd::gossiper_json::get_live_endpoint.set(r, [&g] (std::unique_ptr req) -> future { auto res = co_await g.get_live_members_synchronized(); - co_return json::json_return_type(container_to_vec(res)); + co_return json::json_return_type(res | std::views::transform([] (auto& ep) { return fmt::to_string(ep); }) | std::ranges::to()); }); httpd::gossiper_json::get_endpoint_downtime.set(r, [&g] (std::unique_ptr req) -> future { diff --git a/api/storage_service.cc b/api/storage_service.cc index 3258d1433c..11c866bf75 100644 --- a/api/storage_service.cc +++ b/api/storage_service.cc @@ -719,8 +719,8 @@ static json::json_return_type rest_get_natural_endpoints(http_context& ctx, sharded& ss, const_req req) { auto keyspace = validate_keyspace(ctx, req); - return container_to_vec(ss.local().get_natural_endpoints(keyspace, req.get_query_param("cf"), - req.get_query_param("key"))); + auto res = ss.local().get_natural_endpoints(keyspace, req.get_query_param("cf"), req.get_query_param("key")); + return res | std::views::transform([] (auto& ep) { return fmt::to_string(ep); }) | std::ranges::to(); } static diff --git a/api/token_metadata.cc b/api/token_metadata.cc index 3b2e9de004..58be49f02d 100644 --- a/api/token_metadata.cc +++ b/api/token_metadata.cc @@ -54,7 +54,7 @@ void set_token_metadata(http_context& ctx, routes& r, sharded(); }); ss::get_moving_nodes.set(r, [](const_req req) { @@ -70,7 +70,7 @@ void set_token_metadata(http_context& ctx, routes& r, sharded(); }); ss::get_host_id_map.set(r, [&tm, &g](const_req req) { From eb5160cb4d139d2641480bb81fb27cfc732299f9 Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Mon, 2 Jun 2025 19:33:51 +0300 Subject: [PATCH 5/5] api: Drop no longer used container_to_vec helper All callers are patched to use std::ranges. Signed-off-by: Pavel Emelyanov --- api/api.hh | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/api/api.hh b/api/api.hh index ec700a0a5e..2c8abd9855 100644 --- a/api/api.hh +++ b/api/api.hh @@ -23,17 +23,6 @@ namespace api { -template -std::vector container_to_vec(const T& container) { - std::vector res; - res.reserve(std::size(container)); - - for (const auto& i : container) { - res.push_back(fmt::to_string(i)); - } - return res; -} - template std::vector map_to_key_value(const std::map& map) { std::vector res;