Mutex::Locker locker(m_lock);
OpEvent *op_event;
- Context *on_op_complete = create_op_context_callback(event.op_tid, on_safe,
- &op_event);
+ Context *on_op_complete = create_op_context_callback(event.op_tid, on_ready,
+ on_safe, &op_event);
+ if (on_op_complete == nullptr) {
+ return;
+ }
// ignore errors caused due to replay
op_event->ignore_error_codes = {-EEXIST};
Mutex::Locker locker(m_lock);
OpEvent *op_event;
- Context *on_op_complete = create_op_context_callback(event.op_tid, on_safe,
- &op_event);
+ Context *on_op_complete = create_op_context_callback(event.op_tid, on_ready,
+ on_safe, &op_event);
+ if (on_op_complete == nullptr) {
+ return;
+ }
+
op_event->on_op_finish_event = new C_RefreshIfRequired<I>(
m_image_ctx, new ExecuteOp<I, journal::SnapRemoveEvent>(m_image_ctx, event,
on_op_complete));
Mutex::Locker locker(m_lock);
OpEvent *op_event;
- Context *on_op_complete = create_op_context_callback(event.op_tid, on_safe,
- &op_event);
+ Context *on_op_complete = create_op_context_callback(event.op_tid, on_ready,
+ on_safe, &op_event);
+ if (on_op_complete == nullptr) {
+ return;
+ }
+
op_event->on_op_finish_event = new C_RefreshIfRequired<I>(
m_image_ctx, new ExecuteOp<I, journal::SnapRenameEvent>(m_image_ctx, event,
on_op_complete));
Mutex::Locker locker(m_lock);
OpEvent *op_event;
- Context *on_op_complete = create_op_context_callback(event.op_tid, on_safe,
- &op_event);
+ Context *on_op_complete = create_op_context_callback(event.op_tid, on_ready,
+ on_safe, &op_event);
+ if (on_op_complete == nullptr) {
+ return;
+ }
+
op_event->on_op_finish_event = new C_RefreshIfRequired<I>(
m_image_ctx, new ExecuteOp<I, journal::SnapProtectEvent>(m_image_ctx, event,
on_op_complete));
Mutex::Locker locker(m_lock);
OpEvent *op_event;
- Context *on_op_complete = create_op_context_callback(event.op_tid, on_safe,
- &op_event);
+ Context *on_op_complete = create_op_context_callback(event.op_tid, on_ready,
+ on_safe, &op_event);
+ if (on_op_complete == nullptr) {
+ return;
+ }
+
op_event->on_op_finish_event = new C_RefreshIfRequired<I>(
m_image_ctx, new ExecuteOp<I, journal::SnapUnprotectEvent>(m_image_ctx,
event,
Mutex::Locker locker(m_lock);
OpEvent *op_event;
- Context *on_op_complete = create_op_context_callback(event.op_tid, on_safe,
- &op_event);
+ Context *on_op_complete = create_op_context_callback(event.op_tid, on_ready,
+ on_safe, &op_event);
+ if (on_op_complete == nullptr) {
+ return;
+ }
+
op_event->on_op_finish_event = new C_RefreshIfRequired<I>(
m_image_ctx, new ExecuteOp<I, journal::SnapRollbackEvent>(m_image_ctx,
event,
Mutex::Locker locker(m_lock);
OpEvent *op_event;
- Context *on_op_complete = create_op_context_callback(event.op_tid, on_safe,
- &op_event);
+ Context *on_op_complete = create_op_context_callback(event.op_tid, on_ready,
+ on_safe, &op_event);
+ if (on_op_complete == nullptr) {
+ return;
+ }
+
op_event->on_op_finish_event = new C_RefreshIfRequired<I>(
m_image_ctx, new ExecuteOp<I, journal::RenameEvent>(m_image_ctx, event,
on_op_complete));
Mutex::Locker locker(m_lock);
OpEvent *op_event;
- Context *on_op_complete = create_op_context_callback(event.op_tid, on_safe,
- &op_event);
+ Context *on_op_complete = create_op_context_callback(event.op_tid, on_ready,
+ on_safe, &op_event);
+ if (on_op_complete == nullptr) {
+ return;
+ }
// avoid lock cycles
m_image_ctx.op_work_queue->queue(new C_RefreshIfRequired<I>(
Mutex::Locker locker(m_lock);
OpEvent *op_event;
- Context *on_op_complete = create_op_context_callback(event.op_tid, on_safe,
- &op_event);
+ Context *on_op_complete = create_op_context_callback(event.op_tid, on_ready,
+ on_safe, &op_event);
+ if (on_op_complete == nullptr) {
+ return;
+ }
+
op_event->on_op_finish_event = new C_RefreshIfRequired<I>(
m_image_ctx, new ExecuteOp<I, journal::FlattenEvent>(m_image_ctx, event,
on_op_complete));
template <typename I>
Context *Replay<I>::create_op_context_callback(uint64_t op_tid,
+ Context *on_ready,
Context *on_safe,
OpEvent **op_event) {
+ CephContext *cct = m_image_ctx.cct;
+
assert(m_lock.is_locked());
+ if (m_op_events.count(op_tid) != 0) {
+ lderr(cct) << "duplicate op tid detected: " << op_tid << dendl;
+ on_ready->complete(0);
+ on_safe->complete(-EINVAL);
+ return nullptr;
+ }
*op_event = &m_op_events[op_tid];
(*op_event)->on_start_safe = on_safe;