]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph_filestore_dump: Add set-omaphdr object command
authorDavid Zafman <david.zafman@inktank.com>
Tue, 20 May 2014 18:19:19 +0000 (11:19 -0700)
committerDavid Zafman <dzafman@redhat.com>
Tue, 3 Mar 2015 17:51:30 +0000 (09:51 -0800)
Signed-off-by: David Zafman <david.zafman@inktank.com>
(cherry picked from commit b4d95cc85af9af64d33d541cd69c5f28fd45423b)

src/tools/ceph_filestore_dump.cc

index 1c42c864071920e724c57a78a517614b6f65dbb9..244ac620804a334d35f5d2c7f1973b3566541255 100644 (file)
@@ -1452,6 +1452,26 @@ int do_get_omaphdr(ObjectStore *store, coll_t coll, ghobject_t &ghobj)
   return 0;
 }
 
+int do_set_omaphdr(ObjectStore *store, coll_t coll, ghobject_t &ghobj, int fd)
+{
+  ObjectStore::Transaction tran;
+  ObjectStore::Transaction *t = &tran;
+  bufferlist hdrbl;
+
+  if (debug)
+    cerr << "Omap_setheader " << ghobj << std::endl;
+
+  if (get_fd_data(fd, hdrbl))
+    return 1;
+
+  t->touch(coll, ghobj);
+
+  t->omap_setheader(coll, ghobj, hdrbl);
+
+  store->apply_transaction(*t);
+  return 0;
+}
+
 void usage(po::options_description &desc)
 {
     cerr << std::endl;
@@ -1949,6 +1969,27 @@ int main(int argc, char **argv)
        if (r)
          ret = 1;
         goto out;
+      } else if (objcmd == "set-omaphdr") {
+        // Extra arg
+       if (vm.count("arg2"))
+         usage(desc);
+       int fd;
+       if (vm.count("arg1") == 0 || arg1 == "-") {
+         fd = STDIN_FILENO;
+       } else {
+         fd = open(arg1.c_str(), O_RDONLY|O_LARGEFILE, 0666);
+         if (fd == -1) {
+           cerr << "open " << arg1 << " " << cpp_strerror(errno) << std::endl;
+           ret = 1;
+           goto out;
+         }
+       }
+       r = do_set_omaphdr(fs, coll, ghobj, fd);
+       if (fd != STDIN_FILENO)
+         close(fd);
+       if (r)
+         ret = 1;
+        goto out;
       }
       cerr << "Unknown object command '" << objcmd << "'" << std::endl;
       usage(desc);