From: David Zafman Date: Tue, 20 May 2014 03:47:14 +0000 (-0700) Subject: ceph_filestore_dump: Add set-omap object command X-Git-Tag: v0.80.10~69^2~74 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=20165d101a30c6beb591ca56b56bdf5505f70cf3;p=ceph.git ceph_filestore_dump: Add set-omap object command Signed-off-by: David Zafman (cherry picked from commit 50cd57e902fe508f98f63fea30626780b07561d9) --- diff --git a/src/tools/ceph_filestore_dump.cc b/src/tools/ceph_filestore_dump.cc index aeab525cbb6..0666163e22a 100644 --- a/src/tools/ceph_filestore_dump.cc +++ b/src/tools/ceph_filestore_dump.cc @@ -1392,6 +1392,29 @@ int do_get_omap(ObjectStore *store, coll_t coll, ghobject_t &ghobj, string key) return 0; } +int do_set_omap(ObjectStore *store, coll_t coll, ghobject_t &ghobj, string key, int fd) +{ + ObjectStore::Transaction tran; + ObjectStore::Transaction *t = &tran; + map attrset; + bufferlist valbl; + + if (debug) + cerr << "Set_omap " << ghobj << std::endl; + + if (get_fd_data(fd, valbl)) + return 1; + + attrset.insert(pair(key, valbl)); + + t->touch(coll, ghobj); + + t->omap_setkeys(coll, ghobj, attrset); + + store->apply_transaction(*t); + return 0; +} + void usage(po::options_description &desc) { cerr << std::endl; @@ -1854,6 +1877,27 @@ int main(int argc, char **argv) if (r) ret = 1; goto out; + } else if (objcmd == "set-omap") { + if (vm.count("arg1") == 0) + usage(desc); + + int fd; + if (vm.count("arg2") == 0 || arg2 == "-") { + fd = STDIN_FILENO; + } else { + fd = open(arg2.c_str(), O_RDONLY|O_LARGEFILE, 0666); + if (fd == -1) { + cerr << "open " << arg2 << " " << cpp_strerror(errno) << std::endl; + ret = 1; + goto out; + } + } + r = do_set_omap(fs, coll, ghobj, arg1, fd); + if (fd != STDIN_FILENO) + close(fd); + if (r) + ret = 1; + goto out; } cerr << "Unknown object command '" << objcmd << "'" << std::endl; usage(desc);