From 5f87bab2f9d659abbb463a2e149ad9f6d493447a Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 22 Dec 2015 17:45:29 -0500 Subject: [PATCH] ceph-objectstore-tool: add fsck command Signed-off-by: Sage Weil --- src/test/ceph_objectstore_tool.py | 2 +- src/tools/ceph_objectstore_tool.cc | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/test/ceph_objectstore_tool.py b/src/test/ceph_objectstore_tool.py index 5547bd6d3a15f..1a9df9d12aa1b 100755 --- a/src/test/ceph_objectstore_tool.py +++ b/src/test/ceph_objectstore_tool.py @@ -907,7 +907,7 @@ def main(argv): # Specify a bad --op command cmd = (CFSD_PREFIX + "--op oops").format(osd=ONEOSD) - ERRORS += test_failure(cmd, "Must provide --op (info, log, remove, export, import, list, fix-lost, list-pgs, rm-past-intervals, dump-journal, dump-super, meta-list, get-osdmap, set-osdmap, get-inc-osdmap, set-inc-osdmap, mark-complete)") + ERRORS += test_failure(cmd, "Must provide --op (info, log, remove, fsck, export, import, list, fix-lost, list-pgs, rm-past-intervals, dump-journal, dump-super, meta-list, get-osdmap, set-osdmap, get-inc-osdmap, set-inc-osdmap, mark-complete)") # Provide just the object param not a command cmd = (CFSD_PREFIX + "object").format(osd=ONEOSD) diff --git a/src/tools/ceph_objectstore_tool.cc b/src/tools/ceph_objectstore_tool.cc index 4b81f2ad1c7a5..fd4110fafefdf 100644 --- a/src/tools/ceph_objectstore_tool.cc +++ b/src/tools/ceph_objectstore_tool.cc @@ -2229,7 +2229,7 @@ int main(int argc, char **argv) ("pgid", po::value(&pgidstr), "PG id, mandatory for info, log, remove, export, rm-past-intervals, mark-complete") ("op", po::value(&op), - "Arg is one of [info, log, remove, export, import, list, fix-lost, list-pgs, rm-past-intervals, dump-journal, dump-super, meta-list, " + "Arg is one of [info, log, remove, fsck, export, import, list, fix-lost, list-pgs, rm-past-intervals, dump-journal, dump-super, meta-list, " "get-osdmap, set-osdmap, get-inc-osdmap, set-inc-osdmap, mark-complete]") ("epoch", po::value(&epoch), "epoch# for get-osdmap and get-inc-osdmap, the current epoch in use if not specified") @@ -2329,7 +2329,7 @@ int main(int argc, char **argv) usage(desc); myexit(1); } - if (op != "list" && vm.count("op") && vm.count("object")) { + if (op != "list" && op != "fsck" && vm.count("op") && vm.count("object")) { cerr << "Can't specify both --op and object command syntax" << std::endl; usage(desc); myexit(1); @@ -2462,6 +2462,20 @@ int main(int argc, char **argv) myexit(1); } + if (op == "fsck") { + int r = fs->fsck(); + if (r < 0) { + cerr << "fsck failed: " << cpp_strerror(r) << std::endl; + exit(1); + } + if (r > 0) { + cerr << "fsck found " << r << " errors" << std::endl; + exit(1); + } + cout << "fsck found no errors" << std::endl; + exit(0); + } + ObjectStore::Sequencer *osr = new ObjectStore::Sequencer(__func__); int ret = fs->mount(); if (ret < 0) { @@ -2796,7 +2810,7 @@ int main(int argc, char **argv) // If not an object command nor any of the ops handled below, then output this usage // before complaining about a bad pgid if (!vm.count("objcmd") && op != "export" && op != "info" && op != "log" && op != "rm-past-intervals" && op != "mark-complete") { - cerr << "Must provide --op (info, log, remove, export, import, list, fix-lost, list-pgs, rm-past-intervals, dump-journal, dump-super, meta-list, " + cerr << "Must provide --op (info, log, remove, fsck, export, import, list, fix-lost, list-pgs, rm-past-intervals, dump-journal, dump-super, meta-list, " "get-osdmap, set-osdmap, get-inc-osdmap, set-inc-osdmap, mark-complete)" << std::endl; usage(desc); -- 2.39.5