From: David Zafman Date: Thu, 22 Jan 2015 18:07:09 +0000 (-0800) Subject: ceph-objectstore-tool: Add dump-info command to show object info X-Git-Tag: v9.0.2~168^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=244092d034781d2e980f9de7c6f9eea227967c5a;p=ceph.git ceph-objectstore-tool: Add dump-info command to show object info Signed-off-by: David Zafman --- diff --git a/src/tools/ceph_objectstore_tool.cc b/src/tools/ceph_objectstore_tool.cc index 6522697b90d..69125983247 100644 --- a/src/tools/ceph_objectstore_tool.cc +++ b/src/tools/ceph_objectstore_tool.cc @@ -2334,6 +2334,33 @@ struct do_fix_lost : public action_on_object_t { } }; +int print_obj_info(ObjectStore *store, coll_t coll, ghobject_t &ghobj, Formatter* formatter) +{ + bufferlist attr; + int r = store->getattr(coll, ghobj, OI_ATTR, attr); + if (r < 0) { + cerr << "Error getting attr on : " << make_pair(coll, ghobj) << ", " + << cpp_strerror(r) << std::endl; + return r; + } + object_info_t oi; + bufferlist::iterator bp = attr.begin(); + try { + ::decode(oi, bp); + } catch (...) { + r = -EINVAL; + cerr << "Error getting attr on : " << make_pair(coll, ghobj) << ", " + << cpp_strerror(r) << std::endl; + return r; + } + formatter->open_object_section("info"); + oi.dump(formatter); + formatter->close_section(); + formatter->flush(cout); + cout << std::endl; + return 0; +} + void usage(po::options_description &desc) { cerr << std::endl; @@ -2349,6 +2376,7 @@ void usage(po::options_description &desc) cerr << "ceph-objectstore-tool ... list-attrs" << std::endl; cerr << "ceph-objectstore-tool ... list-omap" << std::endl; cerr << "ceph-objectstore-tool ... remove" << std::endl; + cerr << "ceph-objectstore-tool ... dump-info" << std::endl; cerr << std::endl; cerr << "ceph-objectstore-tool import-rados [file]" << std::endl; cerr << std::endl; @@ -3186,6 +3214,9 @@ int main(int argc, char **argv) if (fd != STDIN_FILENO) close(fd); goto out; + } else if (objcmd == "dump-info") { + ret = print_obj_info(fs, coll, ghobj, formatter); + goto out; } cerr << "Unknown object command '" << objcmd << "'" << std::endl; usage(desc);