]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
MDS: miscellaneous standby-replay fixes and cleanups.
authorGreg Farnum <gregf@hq.newdream.net>
Fri, 3 Dec 2010 00:38:00 +0000 (16:38 -0800)
committerGreg Farnum <gregf@hq.newdream.net>
Thu, 6 Jan 2011 19:12:13 +0000 (11:12 -0800)
Signed-off-by: Greg Farnum <gregf@hq.newdream.net>
src/mds/MDLog.cc
src/mds/MDLog.h
src/mds/MDS.cc

index adbbc003e296efe177f25f1d147a60644895d48d..6a0cd4a6ebf3bd8e7f0b085799d549b0525d0fba 100644 (file)
@@ -467,7 +467,8 @@ void MDLog::replay(Context *c)
   dout(10) << "replay start, from " << journaler->get_read_pos()
           << " to " << journaler->get_write_pos() << dendl;
 
-  assert(num_events == 0);
+  assert(num_events == 0 || already_replayed);
+  already_replayed = true;
 
   replay_thread.create();
 }
index 74506b48acbe29a4f8df58fd9394e5fa416667b1..9012610a9cd4d398cd68c1bff2c346b347fd5d38 100644 (file)
@@ -87,6 +87,7 @@ protected:
       return 0;
     }
   } replay_thread;
+  bool already_replayed;
 
   friend class ReplayThread;
   friend class C_MDL_Replay;
@@ -151,6 +152,7 @@ public:
                  journaler(0),
                  logger(0),
                  replay_thread(this),
+                 already_replayed(false),
                  expiring_events(0), expired_events(0),
                  writing_subtree_map(false),
                  cur_event(NULL) { }             
index f408b9593bf6afc5821f788081ba338bb3f476bc..38e57a028a310b03fbc1e036ec364ae6d8229a68 100644 (file)
@@ -1139,6 +1139,8 @@ void MDS::boot_start(int step, int r)
   case 3:
     if (is_replay() || is_oneshot_replay() || is_standby_replay()) {
       dout(2) << "boot_start " << step << ": replaying mds log" << dendl;
+      if(is_oneshot_replay() || is_standby_replay())
+        mdlog->get_journaler()->set_readonly();
       mdlog->replay(new C_MDS_BootStart(this, 4));
       break;
     } else {
@@ -1233,6 +1235,8 @@ void MDS::replay_done()
 
   if (is_standby_replay()) {
     standby_trim_segments();
+    mdlog->get_journaler()->set_writeable();
+    dout(10) << "setting replay timer" << dendl;
     timer.add_event_after(g_conf.mds_replay_interval,
                           new C_Standby_replay_start(this));
     return;