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();
}
return 0;
}
} replay_thread;
+ bool already_replayed;
friend class ReplayThread;
friend class C_MDL_Replay;
journaler(0),
logger(0),
replay_thread(this),
+ already_replayed(false),
expiring_events(0), expired_events(0),
writing_subtree_map(false),
cur_event(NULL) { }
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 {
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;