From: Radoslaw Zarzynski Date: Wed, 24 Oct 2018 19:10:10 +0000 (+0200) Subject: core: avoid get_epoch()-driven refcounting on OSDMap in ReplicatedBackend. X-Git-Tag: 3.2-0~80^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=eb69cd8a6df85e0e57e5dc9a284d1b73c6c060e1;p=ceph-ci.git core: avoid get_epoch()-driven refcounting on OSDMap in ReplicatedBackend. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/osd/PGBackend.h b/src/osd/PGBackend.h index e9b9d4441d9..989b2a4ea36 100644 --- a/src/osd/PGBackend.h +++ b/src/osd/PGBackend.h @@ -206,6 +206,7 @@ typedef std::shared_ptr OSDMapRef; virtual const PGLog &get_log() const = 0; virtual bool pgb_is_primary() const = 0; virtual OSDMapRef pgb_get_osdmap() const = 0; + virtual epoch_t pgb_get_osdmap_epoch() const = 0; virtual const pg_info_t &get_info() const = 0; virtual const pg_pool_t &get_pool() const = 0; @@ -309,6 +310,7 @@ typedef std::shared_ptr OSDMapRef; parent(l) {} bool is_primary() const { return get_parent()->pgb_is_primary(); } OSDMapRef get_osdmap() const { return get_parent()->pgb_get_osdmap(); } + epoch_t get_osdmap_epoch() const { return get_parent()->pgb_get_osdmap_epoch(); } const pg_info_t &get_info() { return get_parent()->get_info(); } std::ostream& gen_prefix(std::ostream& out) const { diff --git a/src/osd/PrimaryLogPG.h b/src/osd/PrimaryLogPG.h index 262341d32d0..5263a4ddad0 100644 --- a/src/osd/PrimaryLogPG.h +++ b/src/osd/PrimaryLogPG.h @@ -369,9 +369,12 @@ public: bool pgb_is_primary() const override { return is_primary(); } - OSDMapRef pgb_get_osdmap() const override { + OSDMapRef pgb_get_osdmap() const override final { return get_osdmap(); } + epoch_t pgb_get_osdmap_epoch() const override final { + return get_osdmap_epoch(); + } const pg_info_t &get_info() const override { return info; } diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index 2227f476768..f45ec600d1b 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -904,7 +904,7 @@ Message * ReplicatedBackend::generate_subop( reqid, parent->whoami_shard(), spg_t(get_info().pgid.pgid, peer.shard), soid, acks_wanted, - get_osdmap()->get_epoch(), + get_osdmap_epoch(), parent->get_last_peering_reset_epoch(), tid, at_version); @@ -983,7 +983,7 @@ void ReplicatedBackend::issue_op( if (op->op && op->op->pg_trace) wr->trace.init("replicated op", nullptr, &op->op->pg_trace); get_parent()->send_message_osd_cluster( - shard.osd, wr, get_osdmap()->get_epoch()); + shard.osd, wr, get_osdmap_epoch()); } } } @@ -1018,7 +1018,7 @@ void ReplicatedBackend::do_repop(OpRequestRef op) rm->op = op; rm->ackerosd = ackerosd; rm->last_complete = get_info().last_complete; - rm->epoch_started = get_osdmap()->get_epoch(); + rm->epoch_started = get_osdmap_epoch(); ceph_assert(m->logbl.length()); // shipped transaction and log entries @@ -1108,12 +1108,12 @@ void ReplicatedBackend::repop_commit(RepModifyRef rm) MOSDRepOpReply *reply = new MOSDRepOpReply( m, get_parent()->whoami_shard(), - 0, get_osdmap()->get_epoch(), m->get_min_epoch(), CEPH_OSD_FLAG_ONDISK); + 0, get_osdmap_epoch(), m->get_min_epoch(), CEPH_OSD_FLAG_ONDISK); reply->set_last_complete_ondisk(rm->last_complete); reply->set_priority(CEPH_MSG_PRIO_HIGH); // this better match ack priority! reply->trace = rm->op->pg_trace; get_parent()->send_message_osd_cluster( - rm->ackerosd, reply, get_osdmap()->get_epoch()); + rm->ackerosd, reply, get_osdmap_epoch()); log_subop_stats(get_parent()->get_logger(), rm->op, l_osd_sop_w); }