From b50c43ce5e52f5bbcb3684f6793d50f34ed741d1 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Mon, 19 May 2014 20:37:01 -0700 Subject: [PATCH] ceph_filestore_dump: Add get-omap object command Signed-off-by: David Zafman --- src/tools/ceph_filestore_dump.cc | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/tools/ceph_filestore_dump.cc b/src/tools/ceph_filestore_dump.cc index 98f07401400e..548ba1976cc9 100644 --- a/src/tools/ceph_filestore_dump.cc +++ b/src/tools/ceph_filestore_dump.cc @@ -1363,6 +1363,37 @@ int do_rm_attr(ObjectStore *store, coll_t coll, ghobject_t &ghobj, string key) return 0; } +int do_get_omap(ObjectStore *store, coll_t coll, ghobject_t &ghobj, string key) +{ + set keys; + map out; + + keys.insert(key); + + int r = store->omap_get_values(coll, ghobj, keys, &out); + if (r < 0) { + cerr << "omap_get_values: " << cpp_strerror(-r) << std::endl; + return r; + } + + if (out.empty()) { + cerr << "Key not found" << std::endl; + return -ENOENT; + } + + assert(out.size() == 1); + + bufferlist bl = out.begin()->second; + string value(bl.c_str(), bl.length()); + if (outistty) { + cleanbin(value); + value.push_back('\n'); + } + cout << value; + + return 0; +} + void usage(po::options_description &desc) { cerr << std::endl; @@ -1818,6 +1849,13 @@ int main(int argc, char **argv) if (r) ret = 1; goto out; + } else if (objcmd == "get-omap") { + if (vm.count("arg1") == 0) + usage(desc); + r = do_get_omap(fs, coll, ghobj, arg1); + if (r) + ret = 1; + goto out; } cerr << "Unknown object command '" << objcmd << "'" << std::endl; usage(desc); -- 2.47.3