After PurgeQueue::wait_for_recovery() locks the mutex, purge queue
may have already been recovered.
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
MDSGatherBuilder gather(g_ceph_context,
new C_MDS_BootStart(this, MDS_BOOT_REPLAY_DONE));
- if (!standby_replaying && !purge_queue.is_recovered()) {
+ if (!standby_replaying) {
dout(2) << "boot_start " << step << ": waiting for purge queue recovered" << dendl;
purge_queue.wait_for_recovery(new C_IO_Wrapper(this, gather.new_sub()));
}
}));
}
-bool PurgeQueue::is_recovered()
-{
- Mutex::Locker l(lock);
- return recovered;
-}
-
void PurgeQueue::wait_for_recovery(Context* c)
{
Mutex::Locker l(lock);
- waiting_for_recovery.push_back(c);
+ if (recovered)
+ c->complete(0);
+ else
+ waiting_for_recovery.push_back(c);
}
void PurgeQueue::_recover()
// Read the Journaler header for an existing queue and start consuming
void open(Context *completion);
- bool is_recovered();
void wait_for_recovery(Context *c);
// Submit one entry to the work queue. Call back when it is persisted