From e44c042c3dffc4ca396dbdfac24fa65914c0b73b Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 3 Jul 2015 23:09:54 +0800 Subject: [PATCH] tools/ceph-objectstore-tool: add "get-osdmap" command Signed-off-by: Kefu Chai (cherry picked from commit f0c130d6b1bc2a8a0cce6d78a6e69995fe00a427) Conflicts: src/tools/ceph_objectstore_tool.cc (trivial) --- src/tools/ceph_objectstore_tool.cc | 34 +++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/src/tools/ceph_objectstore_tool.cc b/src/tools/ceph_objectstore_tool.cc index b62c210ce0894..70020cc215f63 100644 --- a/src/tools/ceph_objectstore_tool.cc +++ b/src/tools/ceph_objectstore_tool.cc @@ -2721,6 +2721,7 @@ int main(int argc, char **argv) { string dpath, jpath, pgidstr, op, file, object, objcmd, arg1, arg2, type, format; spg_t pgid; + unsigned epoch = 0; ghobject_t ghobj; bool human_readable, no_overwrite; bool force; @@ -2738,9 +2739,12 @@ int main(int argc, char **argv) ("pgid", po::value(&pgidstr), "PG id, mandatory for info, log, remove, export, rm-past-intervals") ("op", po::value(&op), - "Arg is one of [info, log, remove, export, import, list, fix-lost, list-pgs, rm-past-intervals, set-allow-sharded-objects, dump-journal, dump-super]") + "Arg is one of [info, log, remove, export, import, list, fix-lost, list-pgs, rm-past-intervals, set-allow-sharded-objects, dump-journal, dump-super, " + "get-osdmap, set-osdmap]") + ("epoch", po::value(&epoch), + "epoch# for get-osdmap, the current epoch in use if not specified") ("file", po::value(&file), - "path of file to export or import") + "path of file to export, import, get-osdmap or set-osdmap") ("format", po::value(&format)->default_value("json-pretty"), "Output format which may be json, json-pretty, xml, xml-pretty") ("debug", "Enable diagnostic output to stderr") @@ -2888,7 +2892,7 @@ int main(int argc, char **argv) outistty = isatty(STDOUT_FILENO); file_fd = fd_none; - if (op == "export" && !dry_run) { + if ((op == "export" || op == "get-osdmap") && !dry_run) { if (!vm.count("file") || file == "-") { if (outistty) { cerr << "stdout is a tty and no --file filename specified" << std::endl; @@ -2911,7 +2915,8 @@ int main(int argc, char **argv) } if (vm.count("file") && file_fd == fd_none && !dry_run) { - cerr << "--file option only applies to import, export or set-osdmap" << std::endl; + cerr << "--file option only applies to import, export, " + << "get-osdmap or set-osdmap" << std::endl; myexit(1); } @@ -3264,6 +3269,25 @@ int main(int argc, char **argv) } } goto out; + } else if (op == "get-osdmap") { + bufferlist bl; + OSDMap osdmap; + if (epoch == 0) { + epoch = superblock.current_epoch; + } + ret = get_osdmap(fs, epoch, osdmap, bl); + if (ret) { + cerr << "Failed to get osdmap#" << epoch << ": " + << cpp_strerror(ret) << std::endl; + goto out; + } + ret = bl.write_fd(file_fd); + if (ret) { + cerr << "Failed to write to " << file << ": " << cpp_strerror(ret) << std::endl; + } else { + cout << "osdmap#" << epoch << " exported." << std::endl; + } + goto out; } else if (op == "set-osdmap") { bufferlist bl; ret = get_fd_data(file_fd, bl); @@ -3364,7 +3388,7 @@ int main(int argc, char **argv) // before complaining about a bad pgid if (!vm.count("objcmd") && op != "export" && op != "info" && op != "log" && op != "rm-past-intervals") { cerr << "Must provide --op (info, log, remove, export, import, list, fix-lost, list-pgs, rm-past-intervals, set-allow-sharded-objects, dump-journal, dump-super, " - "set-osdmap)" + "set-osdmap, get-osdmap)" << std::endl; usage(desc); ret = 1; -- 2.39.5