]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph_objectstore_tool: Allow the metadata_section to be anywhere in the export
authorDavid Zafman <dzafman@redhat.com>
Thu, 16 Oct 2014 19:27:56 +0000 (12:27 -0700)
committerDavid Zafman <dzafman@redhat.com>
Tue, 3 Mar 2015 19:20:59 +0000 (11:20 -0800)
Signed-off-by: David Zafman <dzafman@redhat.com>
(cherry picked from commit 62dd912f1192b28700a15b02507a8c9efd710cb5)

Conflicts:
src/tools/ceph_objectstore_tool.cc

src/tools/ceph_objectstore_tool.cc

index 036bdea1eef123b0fc6d7f96a9b5509e492e7589..f8f534726e47674b7d6d539ac51bd32cb429b81d 100644 (file)
@@ -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;
 }