From c6f8a0116a8e65afa4df5a04d52c5d3d7b64fcae Mon Sep 17 00:00:00 2001 From: Aleksandra Martyniuk Date: Fri, 12 Jul 2024 16:47:58 +0200 Subject: [PATCH] nodetool: prepare operation related classes for suboperations Modify operation and add operation_action class so that information about suboperations is stored. It's a preparation for adding suboperations support to nodetool. --- tools/scylla-nodetool.cc | 12 ++++++++++++ tools/utils.cc | 2 +- tools/utils.hh | 31 +++++++++++++++++++++++-------- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/tools/scylla-nodetool.cc b/tools/scylla-nodetool.cc index 70d7d9f47e..ec4fbb474c 100644 --- a/tools/scylla-nodetool.cc +++ b/tools/scylla-nodetool.cc @@ -363,6 +363,18 @@ keyspace_and_table parse_keyspace_and_table(scylla_rest_client& client, const bp } using operation_func = void(*)(scylla_rest_client&, const bpo::variables_map&); +struct operation_action{ + std::optional func = std::nullopt; + std::map suboperation_funcs = {}; + + operation_action(operation_func f) + : func(std::move(f)) + {} + + operation_action(std::map subfs) + : suboperation_funcs(std::move(subfs)) + {} +}; std::map get_operations_with_func(); diff --git a/tools/utils.cc b/tools/utils.cc index 62e0f631ec..58fd0325e5 100644 --- a/tools/utils.cc +++ b/tools/utils.cc @@ -24,7 +24,7 @@ namespace bpo = boost::program_options; namespace tools::utils { bool operation::matches(std::string_view name) const { - return _name == name || std::ranges::find(_aliases, name) != _aliases.end(); + return _name[0] == name || std::ranges::find(_aliases, name) != _aliases.end(); } namespace { diff --git a/tools/utils.hh b/tools/utils.hh index fd697dc89f..75addb58e8 100644 --- a/tools/utils.hh +++ b/tools/utils.hh @@ -83,13 +83,13 @@ public: }; class operation { - std::string _name; + std::vector _name = {}; std::vector _aliases; std::string _summary; std::string _description; std::vector _options; std::vector _positional_options; - + std::vector _suboperations; public: operation( std::string name, @@ -97,13 +97,18 @@ public: std::string summary, std::string description, std::vector options = {}, - std::vector positional_options = {}) - : _name(std::move(name)) + std::vector positional_options = {}, + std::vector suboperations = {}) + : _name({std::move(name)}) , _aliases(std::move(aliases)) , _summary(std::move(summary)) , _description(std::move(description)) , _options(std::move(options)) - , _positional_options(std::move(positional_options)) { + , _positional_options(std::move(positional_options)) + , _suboperations(std::move(suboperations)) { + for (auto& op: _suboperations) { + op.set_superoperation_name(_name[0]); + } } operation( @@ -111,19 +116,29 @@ public: std::string summary, std::string description, std::vector options = {}, - std::vector positional_options = {}) - : operation(std::move(name), {}, std::move(summary), std::move(description), std::move(options), std::move(positional_options)) + std::vector positional_options = {}, + std::vector suboperations = {}) + : operation(std::move(name), {}, std::move(summary), std::move(description), std::move(options), std::move(positional_options), std::move(suboperations)) {} - const std::string& name() const { return _name; } + const std::string& name() const { return _name[0]; } + const std::vector& fullname() const { return _name; } const std::vector& aliases() const { return _aliases; } const std::string& summary() const { return _summary; } const std::string& description() const { return _description; } const std::vector& options() const { return _options; } const std::vector& positional_options() const { return _positional_options; } + const std::vector& suboperations() const { return _suboperations; } // Does the name or any of the aliases matches the provided name? bool matches(std::string_view name) const; +private: + void set_superoperation_name(std::string& name) { + _name.push_back(name); + for (auto& op: _suboperations) { + op.set_superoperation_name(name); + } + } }; inline bool operator<(const operation& a, const operation& b) {