]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
tools: update Dumper to use JournalPointer
authorJohn Spray <john.spray@inktank.com>
Thu, 8 May 2014 12:21:43 +0000 (13:21 +0100)
committerJohn Spray <john.spray@inktank.com>
Tue, 20 May 2014 13:07:50 +0000 (14:07 +0100)
Signed-off-by: John Spray <john.spray@inktank.com>
src/tools/cephfs/Dumper.cc
src/tools/cephfs/Dumper.h

index c47f88b8dfaee1efc2d7bee1a70ea71342ad5bfa..6ca58ed4e8904bbfcdaaa74f4c27f25a3cdc9fef 100644 (file)
@@ -22,6 +22,7 @@
 #include "common/safe_io.h"
 #include "mds/mdstypes.h"
 #include "mds/LogEvent.h"
+#include "mds/JournalPointer.h"
 #include "osdc/Journaler.h"
 
 #include "Dumper.h"
@@ -38,14 +39,19 @@ int Dumper::init(int rank_)
     return r;
   }
 
-  inodeno_t ino = MDS_INO_LOG_OFFSET + rank;
-  journaler = new Journaler(ino, mdsmap->get_metadata_pool(), CEPH_FS_ONDISK_MAGIC,
-                                       objecter, 0, 0, &timer);
-  return 0;
+  JournalPointer jp(rank, mdsmap->get_metadata_pool());
+  int jp_load_result = jp.load(objecter, &lock);
+  if (jp_load_result != 0) {
+    std::cerr << "Error loading journal: " << cpp_strerror(jp_load_result) << std::endl;
+    return jp_load_result;
+  } else {
+    ino = jp.front;
+    return 0;
+  }
 }
 
 
-int Dumper::recover_journal()
+int Dumper::recover_journal(Journaler *journaler)
 {
   bool done = false;
   Cond cond;
@@ -77,14 +83,15 @@ void Dumper::dump(const char *dump_file)
   Cond cond;
   Mutex localLock("dump:lock");
 
-  r = recover_journal();
+  Journaler journaler(ino, mdsmap->get_metadata_pool(), CEPH_FS_ONDISK_MAGIC,
+                                       objecter, 0, 0, &timer);
+  r = recover_journal(&journaler);
   if (r) {
     return;
   }
-  uint64_t start = journaler->get_read_pos();
-  uint64_t end = journaler->get_write_pos();
+  uint64_t start = journaler.get_read_pos();
+  uint64_t end = journaler.get_write_pos();
   uint64_t len = end-start;
-  inodeno_t ino = MDS_INO_LOG_OFFSET + rank;
 
   cout << "journal is " << start << "~" << len << std::endl;
 
@@ -92,7 +99,7 @@ void Dumper::dump(const char *dump_file)
   bufferlist bl;
 
   lock.Lock();
-  filer.read(ino, &journaler->get_layout(), CEPH_NOSNAP,
+  filer.read(ino, &journaler.get_layout(), CEPH_NOSNAP,
              start, len, &bl, 0, new C_SafeCond(&localLock, &cond, &done));
   lock.Unlock();
   localLock.Lock();
@@ -159,8 +166,6 @@ void Dumper::undump(const char *dump_file)
 
   cout << "start " << start << " len " << len << std::endl;
   
-  inodeno_t ino = MDS_INO_LOG_OFFSET + rank;
-
   Journaler::Header h;
   h.trimmed_pos = start;
   h.expire_pos = start;
index 0df861e43fe3c3b74bbcdf0833bf4f74d076f733..1986eca34feb75c58a1b48b614ac547221efbe8d 100644 (file)
@@ -16,7 +16,8 @@
 
 
 #include "MDSUtility.h"
-#include "osdc/Journaler.h"
+
+class Journaler;
 
 /**
  * This class lets you dump out an mds journal for troubleshooting or whatever.
 
 class Dumper : public MDSUtility {
 private:
-  Journaler *journaler;
   int rank;
+  inodeno_t ino;
 
 public:
-  Dumper() : journaler(NULL), rank(-1)
+  Dumper() : rank(-1), ino(-1)
   {}
 
   void handle_mds_map(MMDSMap* m);
 
   int init(int rank);
-  int recover_journal();
+  int recover_journal(Journaler *journaler);
   void dump(const char *dumpfile);
   void undump(const char *dumpfile);
 };