From cfd2cc9449ddf291d0fc03d96eb18806afc39578 Mon Sep 17 00:00:00 2001 From: Matan Breizman Date: Sun, 6 Aug 2023 13:03:19 +0000 Subject: [PATCH] tools/ceph_monstore_tool: add remove-key command Signed-off-by: Matan Breizman --- src/mon/MonitorDBStore.h | 8 ++++++++ src/tools/ceph_monstore_tool.cc | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/mon/MonitorDBStore.h b/src/mon/MonitorDBStore.h index 11608e9e553..b7dfc50b0a1 100644 --- a/src/mon/MonitorDBStore.h +++ b/src/mon/MonitorDBStore.h @@ -604,6 +604,14 @@ class MonitorDBStore return combine_strings(prefix, os.str()); } + int clear_key(const std::string& prefix, const std::string& key) { + ceph_assert(!prefix.empty()); + ceph_assert(!key.empty()); + KeyValueDB::Transaction dbt = db->get_transaction(); + dbt->rmkey(prefix, key); + return db->submit_transaction_sync(dbt); + } + void clear(std::set& prefixes) { KeyValueDB::Transaction dbt = db->get_transaction(); diff --git a/src/tools/ceph_monstore_tool.cc b/src/tools/ceph_monstore_tool.cc index f6b0dc62ae5..8c6c9c7233b 100644 --- a/src/tools/ceph_monstore_tool.cc +++ b/src/tools/ceph_monstore_tool.cc @@ -211,6 +211,7 @@ void usage(const char *n, po::options_description &d) << " get crushmap [-- options] get crushmap (version VER if specified)\n" << " (default: last committed)\n" << " get-key PREFIX KEY [-- options] get key\n" + << " remove-key PREFIX KEY remove key\n" << " show-versions [-- options] show the first&last committed version of map\n" << " (show-versions -- --help for more info)\n" << " dump-keys dumps store keys to FILE\n" @@ -1410,6 +1411,32 @@ int main(int argc, char **argv) { err = rewrite_crush(argv[0], subcmds, st); } else if (cmd == "rebuild") { err = rebuild_monstore(argv[0], subcmds, st); + } else if (cmd == "remove-key") { + string prefix, key; + // No visible options for this command + po::options_description op_desc("Allowed 'get' options"); + po::options_description hidden_op_desc("Hidden 'get' options"); + hidden_op_desc.add_options() + ("prefix", po::value(&prefix),"prefix") + ("key", po::value(&key),"key") + ; + po::positional_options_description op_positional; + op_positional.add("prefix", 1); + op_positional.add("key", 1); + + po::variables_map op_vm; + int r = parse_cmd_args(&op_desc, &hidden_op_desc, &op_positional, + subcmds, &op_vm); + if (r < 0) { + return -r; + } + r = st.clear_key(prefix, key); + if (r < 0) { + std::cerr << "error removing (" + << prefix << "," << key << ")" + << std::endl; + return r; + } } else { std::cerr << "Unrecognized command: " << cmd << std::endl; usage(argv[0], desc); -- 2.47.3