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>
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);
{
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;