// detect if the image has been deleted while the leader was offline
auto& image_replayer = it->second;
image_replayer->set_finished(false);
- image_replayer->restart();
+ image_replayer->restart(new C_TrackedOp(m_async_op_tracker, nullptr));
}
m_threads->work_queue->queue(on_finish, 0);
// it will eventually detect that the peer image is missing and
// determine if a delete propagation is required.
auto image_replayer = it->second;
- image_replayer->restart();
+ image_replayer->restart(new C_TrackedOp(m_async_op_tracker, nullptr));
}
m_threads->work_queue->queue(on_finish, 0);
}
m_manual_stop = false;
+ auto cct = static_cast<CephContext *>(m_local_io_ctx.cct());
+ auto gather_ctx = new C_Gather(
+ cct, new C_TrackedOp(m_async_op_tracker, nullptr));
for (auto &kv : m_image_replayers) {
auto &image_replayer = kv.second;
- image_replayer->start(nullptr, true);
+ image_replayer->start(gather_ctx->new_sub(), true);
}
+
+ gather_ctx->activate();
}
template <typename I>
void InstanceReplayer<I>::stop()
{
- dout(10) << dendl;
-
- std::lock_guard locker{m_lock};
-
- m_manual_stop = true;
-
- for (auto &kv : m_image_replayers) {
- auto &image_replayer = kv.second;
- image_replayer->stop(nullptr, true);
- }
+ stop(nullptr);
}
template <typename I>
dout(10) << dendl;
auto cct = static_cast<CephContext *>(m_local_io_ctx.cct());
- auto gather_ctx = new C_Gather(cct, on_finish);
+ auto gather_ctx = new C_Gather(
+ cct, new C_TrackedOp(m_async_op_tracker, on_finish));
{
std::lock_guard locker{m_lock};
for (auto &kv : m_image_replayers) {
auto &image_replayer = kv.second;
- image_replayer->restart();
+ image_replayer->restart(new C_TrackedOp(m_async_op_tracker, nullptr));
}
}
}
dout(10) << "global_image_id=" << global_image_id << dendl;
- image_replayer->start(nullptr, false);
+ image_replayer->start(new C_TrackedOp(m_async_op_tracker, nullptr), false);
}
template <typename I>