]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: only move the journaler expire_pos forward
authorSage Weil <sage@newdream.net>
Mon, 25 Apr 2011 18:44:14 +0000 (11:44 -0700)
committerSage Weil <sage@newdream.net>
Mon, 25 Apr 2011 21:14:41 +0000 (14:14 -0700)
We were seeing weird trim errors because expire_pos was getting moved
backwards after a standby-replay -> replay transition.  Make sure the two
places that update the expire_pos only move it forward--never backward.

Fixes: #1023
Signed-off-by: Sage Weil <sage@newdream.net>
src/mds/MDLog.cc
src/mds/journal.cc

index b5e27b876a644f580a2738bf5c7b12295d962771..09cfdce7eb42d520be01f2e31f4363b7e84a9b2c 100644 (file)
@@ -394,7 +394,9 @@ void MDLog::_expired(LogSegment *ls)
       expired_segments.erase(ls);
       num_events -= ls->num_events;
       
-      journaler->set_expire_pos(ls->offset);  // this was the oldest segment, adjust expire pos
+      // this was the oldest segment, adjust expire pos
+      if (journaler->get_expire_pos() < ls->offset)
+       journaler->set_expire_pos(ls->offset);
       
       logger->set(l_mdl_expos, ls->offset);
       logger->inc(l_mdl_segtrm);
index 814fd8d2cad4812ca7e0724ff7137bb755878aaa..09dac9fd8facf6be1dbbe95bc64ad30aff0c6ddc 100644 (file)
@@ -1050,6 +1050,7 @@ void ESubtreeMap::replay(MDS *mds)
 {
   if (expire_pos && expire_pos > mds->mdlog->journaler->get_expire_pos())
     mds->mdlog->journaler->set_expire_pos(expire_pos);
+
   // suck up the subtree map?
   if (mds->mdcache->is_subtrees()) {
     dout(10) << "ESubtreeMap.replay -- ignoring, already have import map" << dendl;