{
dout(5) << "open discovering log bounds" << dendl;
+ assert(!recovery_thread.is_started());
recovery_thread.set_completion(c);
- recovery_thread.create();
+ recovery_thread.create("md_recov_open");
- submit_thread.create();
+ submit_thread.create("md_submit");
// either append() or replay() will follow.
}
delete journaler;
journaler = NULL;
+ // recovery_thread was started at some point in the past. Although
+ // it has called it's completion if we made it back here, it might
+ // still not have been cleaned up: join it.
+ recovery_thread.join();
+
recovery_thread.set_completion(new C_ReopenComplete(this, c));
- recovery_thread.create();
+ recovery_thread.create("md_recov_reopen");
}
void MDLog::append()
<< " to " << journaler->get_write_pos() << dendl;
assert(num_events == 0 || already_replayed);
+ if (already_replayed) {
+ // Ensure previous instance of ReplayThread is joined before
+ // we create another one
+ replay_thread.join();
+ }
already_replayed = true;
- replay_thread.create();
+ replay_thread.create("md_log_replay");
}
void start()
{
if (!started) {
+ dout(10) << __func__ << ": starting" << dendl;
+
started = true;
- reader_thread.create();
- writer_thread.create();
+ reader_thread.create("rbd_reader");
+ writer_thread.create("rbd_writer");
}
}