]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
filejournal: add check() method
authorSage Weil <sage@inktank.com>
Sat, 19 May 2012 22:58:32 +0000 (15:58 -0700)
committerSage Weil <sage@inktank.com>
Wed, 23 May 2012 23:31:42 +0000 (16:31 -0700)
Check if a journal appears to be valid, where valid means the header is
intact and has a matching fsid.

Signed-off-by: Sage Weil <sage@inktank.com>
src/os/FileJournal.cc
src/os/FileJournal.h
src/os/Journal.h

index 0cbb9e1e6c93512c26dd4a0ab36379240767dee7..4366f046e4da83ddfc74b86667f98d005ea5571f 100644 (file)
@@ -343,6 +343,35 @@ int FileJournal::_open_file(int64_t oldsize, blksize_t blksize,
   return 0;
 }
 
+int FileJournal::check()
+{
+  int ret;
+
+  ret = _open(false, false);
+  if (ret < 0)
+    goto done;
+
+  ret = read_header();
+  if (ret < 0)
+    goto done;
+
+  if (header.fsid != fsid) {
+    derr << "check: ondisk fsid " << header.fsid << " doesn't match expected " << fsid
+        << ", invalid (someone else's?) journal" << dendl;
+    ret = -EINVAL;
+    goto done;
+  }
+
+  dout(1) << "check: header looks ok" << dendl;
+  ret = 0;
+
+ done:
+  TEMP_FAILURE_RETRY(::close(fd));
+  fd = -1;
+  return ret;
+}
+
+
 int FileJournal::create()
 {
   void *buf = 0;
index 7e2bb315cc06039daeb18b443e47164fc466b9e6..800d3ba22e15f64e96b03be8b2ffbe342cbcb8f8 100644 (file)
@@ -318,6 +318,7 @@ private:
     delete[] zero_buf;
   }
 
+  int check();
   int create();
   int open(uint64_t fs_op_seq);
   void close();
index 0d5799872b7389145c899a08354d56c2ce38483a..ad4f4a1af0ba466220e09b2000f12e01bbb27eb0 100644 (file)
@@ -42,9 +42,10 @@ public:
     wait_on_full(false) { }
   virtual ~Journal() { }
 
-  virtual int create() = 0;
-  virtual int open(uint64_t fs_op_seq) = 0;
-  virtual void close() = 0;
+  virtual int check() = 0;   ///< check if journal appears valid
+  virtual int create() = 0;  ///< create a fresh journal
+  virtual int open(uint64_t fs_op_seq) = 0;  ///< open an existing journal
+  virtual void close() = 0;  ///< close an open journal
 
   virtual void flush() = 0;
   virtual void throttle() = 0;