From: David Zafman Date: Thu, 16 Oct 2014 19:27:56 +0000 (-0700) Subject: ceph_objectstore_tool: Allow the metadata_section to be anywhere in the export X-Git-Tag: v0.80.10~69^2~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=360f68ec69b36b172d15c6206698340a5c00aafa;p=ceph.git ceph_objectstore_tool: Allow the metadata_section to be anywhere in the export Signed-off-by: David Zafman (cherry picked from commit 62dd912f1192b28700a15b02507a8c9efd710cb5) Conflicts: src/tools/ceph_objectstore_tool.cc --- diff --git a/src/tools/ceph_objectstore_tool.cc b/src/tools/ceph_objectstore_tool.cc index 036bdea1eef..f8f534726e4 100644 --- a/src/tools/ceph_objectstore_tool.cc +++ b/src/tools/ceph_objectstore_tool.cc @@ -1396,12 +1396,9 @@ int get_object(ObjectStore *store, coll_t coll, bufferlist &bl) return 0; } -int get_pg_metadata(ObjectStore *store, coll_t coll, bufferlist &bl) +int get_pg_metadata(bufferlist &bl, metadata_section &ms) { - ObjectStore::Transaction tran; - ObjectStore::Transaction *t = &tran; bufferlist::iterator ebliter = bl.begin(); - metadata_section ms; ms.decode(ebliter); #if DIAGNOSTIC @@ -1421,14 +1418,6 @@ int get_pg_metadata(ObjectStore *store, coll_t coll, bufferlist &bl) cout << std::endl; #endif - coll_t newcoll(ms.info.pgid); - t->collection_rename(coll, newcoll); - - int ret = write_pg(*t, ms.map_epoch, ms.info, ms.log, ms.struct_ver, ms.past_intervals); - if (ret) return ret; - - store->apply_transaction(*t); - return 0; } @@ -1516,6 +1505,7 @@ int do_import_rados(string pool) bool done = false; bool found_metadata = false; + metadata_section ms; while(!done) { ret = read_section(file_fd, &type, &ebl); if (ret) @@ -1633,6 +1623,7 @@ int do_import(ObjectStore *store, OSDSuperblock& sb) bool done = false; bool found_metadata = false; + metadata_section ms; while(!done) { ret = read_section(file_fd, &type, &ebl); if (ret) @@ -1649,7 +1640,7 @@ int do_import(ObjectStore *store, OSDSuperblock& sb) if (ret) return ret; break; case TYPE_PG_METADATA: - ret = get_pg_metadata(store, rmcoll, ebl); + ret = get_pg_metadata(ebl, ms); if (ret) return ret; found_metadata = true; break; @@ -1666,6 +1657,16 @@ int do_import(ObjectStore *store, OSDSuperblock& sb) return EFAULT; } + t = new ObjectStore::Transaction; + coll_t newcoll(ms.info.pgid); + t->collection_rename(rmcoll, newcoll); + + ret = write_pg(*t, ms.map_epoch, ms.info, ms.log, ms.struct_ver, ms.past_intervals); + if (ret) return ret; + + store->apply_transaction(*t); + delete t; + return 0; }