From 9ee2c27096784efceb02b06a0df4325979385f44 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Tue, 20 May 2014 11:19:19 -0700 Subject: [PATCH] ceph_filestore_dump: Add set-omaphdr object command Signed-off-by: David Zafman (cherry picked from commit b4d95cc85af9af64d33d541cd69c5f28fd45423b) --- src/tools/ceph_filestore_dump.cc | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/tools/ceph_filestore_dump.cc b/src/tools/ceph_filestore_dump.cc index 1c42c86407192..244ac620804a3 100644 --- a/src/tools/ceph_filestore_dump.cc +++ b/src/tools/ceph_filestore_dump.cc @@ -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); -- 2.39.5