From 8bde0ae122f384817f4e522604379d1e9b21d8d9 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 3 Jun 2016 14:41:13 -0700 Subject: [PATCH] ReplicatedPG: call op_applied for submit_log_entries based repops Signed-off-by: Samuel Just --- src/osd/ReplicatedPG.cc | 10 +++++++--- src/osd/ReplicatedPG.h | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 834c0c5180a..34d10ccf8bc 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -8723,6 +8723,8 @@ void ReplicatedPG::submit_log_entries( }); } } + t.register_on_applied( + new C_OSD_OnApplied{this, get_osdmap()->get_epoch(), info.last_update}); int r = osd->store->queue_transaction(osr.get(), std::move(t), NULL); assert(r == 0); } @@ -9708,7 +9710,7 @@ void ReplicatedPG::do_update_log_missing(OpRequestRef &op) append_log_entries_update_missing(m->entries, t); // TODO FIX - Context *c = new FunctionContext( + Context *complete = new FunctionContext( [=](int) { MOSDPGUpdateLogMissing *msg = static_cast( @@ -9726,10 +9728,12 @@ void ReplicatedPG::do_update_log_missing(OpRequestRef &op) /* Hack to work around the fact that ReplicatedBackend sends * ack+commit if commit happens first */ if (pool.info.ec_pool()) { - t.register_on_complete(c); + t.register_on_complete(complete); } else { - t.register_on_commit(c); + t.register_on_commit(complete); } + t.register_on_applied( + new C_OSD_OnApplied{this, get_osdmap()->get_epoch(), info.last_update}); int tr = osd->store->queue_transaction( osr.get(), std::move(t), diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index d076720be73..bd357b800dd 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -390,6 +390,22 @@ public: append_log(logv, trim_to, trim_rollback_to, t, transaction_applied); } + struct C_OSD_OnApplied : Context { + ReplicatedPGRef pg; + epoch_t epoch; + eversion_t v; + C_OSD_OnApplied( + ReplicatedPGRef pg, + epoch_t epoch, + eversion_t v) + : pg(pg), epoch(epoch), v(v) {} + void finish(int) override { + pg->lock(); + if (!pg->pg_has_reset_since(epoch)) + pg->op_applied(v); + pg->unlock(); + } + }; void op_applied( const eversion_t &applied_version); -- 2.47.3