]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph_filestore_dump: Add get-omap object command
authorDavid Zafman <david.zafman@inktank.com>
Tue, 20 May 2014 03:37:01 +0000 (20:37 -0700)
committerDavid Zafman <dzafman@redhat.com>
Thu, 28 Aug 2014 23:21:28 +0000 (16:21 -0700)
Signed-off-by: David Zafman <david.zafman@inktank.com>
src/tools/ceph_filestore_dump.cc

index 98f07401400e28508ebd5a54aedb52f55b6e7f80..548ba1976cc9e1a9b520d0ef914e756b115d9cc6 100644 (file)
@@ -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<string> keys;
+  map<string, bufferlist> 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);