From 844dabb7f311e68eba0293ae9ca4c68521745877 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Wed, 14 May 2014 17:39:17 -0700 Subject: [PATCH] ceph_filestore_dump: Add --type list to output objects in a pg in json Signed-off-by: David Zafman --- src/tools/ceph_filestore_dump.cc | 43 +++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/src/tools/ceph_filestore_dump.cc b/src/tools/ceph_filestore_dump.cc index 4a0f49f04d019..e723b6a1e1707 100644 --- a/src/tools/ceph_filestore_dump.cc +++ b/src/tools/ceph_filestore_dump.cc @@ -1133,6 +1133,28 @@ int do_import(ObjectStore *store, OSDSuperblock& sb) return 0; } +int do_list(ObjectStore *store, coll_t coll, Formatter *formatter) +{ + vector objects; + ghobject_t next; + while (!next.is_max()) { + int r = store->collection_list_partial(coll, next, 200, 300, 0, + &objects, &next); + if (r < 0) + return r; + for (vector::iterator i = objects.begin(); + i != objects.end(); ++i) { + + formatter->open_object_section("list"); + i->dump(formatter); + formatter->close_section(); + formatter->flush(cout); + cout << std::endl; + } + } + return 0; +} + int do_remove_object(ObjectStore *store, coll_t coll, ghobject_t &ghobj) { spg_t pg; @@ -1202,7 +1224,7 @@ int main(int argc, char **argv) ("pgid", po::value(&pgidstr), "PG id, mandatory except for import") ("type", po::value(&type), - "Arg is one of [info, log, remove, export, import]") + "Arg is one of [info, log, remove, export, import, list]") ("file", po::value(&file), "path of file to export or import") ("debug", "Enable diagnostic output to stderr") @@ -1252,7 +1274,7 @@ int main(int argc, char **argv) usage(desc); } if (!vm.count("type") && !(vm.count("object") && vm.count("objcmd"))) { - cerr << "Must provide --type (info, log, remove, export, import) or object command..." + cerr << "Must provide --type or object command..." << std::endl; usage(desc); } @@ -1313,8 +1335,6 @@ int main(int argc, char **argv) } if ((fspath.length() == 0 || jpath.length() == 0) || - (type != "info" && type != "log" && type != "remove" && type != "export" - && type != "import") || (type != "import" && pgidstr.length() == 0)) { cerr << "Invalid params" << std::endl; return 1; @@ -1545,6 +1565,17 @@ int main(int argc, char **argv) usage(desc); } + if (type == "list") { + Formatter *formatter = new JSONFormatter(false); + r = do_list(fs, coll, formatter); + if (r) { + cerr << "do_list failed with " << r << std::endl; + ret = 1; + } + goto out; + } + + Formatter *formatter = new JSONFormatter(true); bufferlist bl; map_epoch = PG::peek_map_epoch(fs, coll, infos_oid, &bl); if (debug) @@ -1593,6 +1624,10 @@ int main(int argc, char **argv) formatter->close_section(); formatter->flush(cout); cout << std::endl; + } else { + cerr << "Must provide --type (info, log, remove, export, import, list)" + << std::endl; + usage(desc); } } else { cerr << "PG '" << pgid << "' not found" << std::endl; -- 2.39.5