From 04880f4e447dd6b4a40efacc69723d930886a4f2 Mon Sep 17 00:00:00 2001 From: Piotr Sarna Date: Fri, 8 Jan 2021 14:32:55 +0100 Subject: [PATCH] cql3: add a timeout column to LIST SERVICE LEVEL statement Listing service levels now includes the timeout parameter. --- .../list_service_level_statement.cc | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/cql3/statements/list_service_level_statement.cc b/cql3/statements/list_service_level_statement.cc index 6c522bd281..4d76f23124 100644 --- a/cql3/statements/list_service_level_statement.cc +++ b/cql3/statements/list_service_level_statement.cc @@ -58,7 +58,9 @@ list_service_level_statement::execute(query_processor& qp, type); }; - static thread_local const std::vector> metadata({make_column("service_level", utf8_type)}); + static thread_local const std::vector> metadata({make_column("service_level", utf8_type), + make_column("timeout", duration_type), + }); return make_ready_future().then([this, &state] () { if (_describe_all) { @@ -68,10 +70,24 @@ list_service_level_statement::execute(query_processor& qp, } }) .then([this] (qos::service_levels_info sl_info) { + auto d = [] (const qos::service_level_options::timeout_type& duration) -> bytes_opt { + return std::visit(overloaded_functor{ + [&] (const qos::service_level_options::unset_marker&) { + return bytes_opt(); + }, + [&] (const qos::service_level_options::delete_marker&) { + return bytes_opt(); + }, + [&] (const lowres_clock::duration& d) -> bytes_opt { + auto nanos = std::chrono::duration_cast(d).count(); + return duration_type->decompose(cql_duration(months_counter{0}, days_counter{0}, nanoseconds_counter{nanos})); + }, + }, duration); + }; auto rs = std::make_unique(metadata); - for (auto &&sl : sl_info) { + for (auto &&[sl_name, slo] : sl_info) { rs->add_row(std::vector{ - utf8_type->decompose(sl.first)}); + utf8_type->decompose(sl_name), d(slo.timeout)}); } auto rows = ::make_shared(result(std::move(std::move(rs))));