From: Samuel Just Date: Sat, 12 Oct 2013 01:00:53 +0000 (-0700) Subject: ReplicatedPG: split out op_applied_replica X-Git-Tag: v0.78~286^2~35 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=26b804f266c1cca49b2f7df7247c21713d6a27a2;p=ceph.git ReplicatedPG: split out op_applied_replica Signed-off-by: Samuel Just --- diff --git a/src/osd/PGBackend.h b/src/osd/PGBackend.h index 5ccb5b7dca93..cb070be7c4dc 100644 --- a/src/osd/PGBackend.h +++ b/src/osd/PGBackend.h @@ -111,6 +111,9 @@ const hobject_t &hoid, map &attrs) = 0; + virtual void op_applied_replica( + const eversion_t &applied_version) = 0; + virtual ~Listener() {} }; Listener *parent; diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index bb988d81ec87..8c47321185ec 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -6706,6 +6706,23 @@ void ReplicatedPG::sub_op_modify(OpRequestRef op) // op is cleaned up by oncommit/onapply when both are executed } +void ReplicatedPG::op_applied_replica( + const eversion_t &applied_version) +{ + dout(10) << "op_applied_replica on version " << applied_version << dendl; + if (applied_version != eversion_t()) { + assert(info.last_update >= applied_version); + assert(last_update_applied < applied_version); + last_update_applied = applied_version; + } + if (scrubber.active_rep_scrub) { + if (last_update_applied == scrubber.active_rep_scrub->scrub_to) { + osd->rep_scrub_wq.queue(scrubber.active_rep_scrub); + scrubber.active_rep_scrub = 0; + } + } +} + void ReplicatedPG::sub_op_modify_applied(RepModify *rm) { lock(); @@ -6724,17 +6741,7 @@ void ReplicatedPG::sub_op_modify_applied(RepModify *rm) osd->send_message_osd_cluster(rm->ackerosd, ack, get_osdmap()->get_epoch()); } - if (m->version != eversion_t()) { - assert(info.last_update >= m->version); - assert(last_update_applied < m->version); - last_update_applied = m->version; - } - if (scrubber.active_rep_scrub) { - if (last_update_applied == scrubber.active_rep_scrub->scrub_to) { - osd->rep_scrub_wq.queue(scrubber.active_rep_scrub); - scrubber.active_rep_scrub = 0; - } - } + op_applied_replica(m->version); } else { dout(10) << "sub_op_modify_applied on " << rm << " op " << *rm->op->get_req() << " from epoch " << rm->epoch_started << " < last_peering_reset " diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index c921029aafc4..47b411acac35 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -323,6 +323,9 @@ public: return get_object_context(hoid, true, &attrs); } + void op_applied_replica( + const eversion_t &applied_version); + /* * Capture all object state associated with an in-progress read or write. */