]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
core: avoid get_epoch()-driven refcounting on OSDMap in ReplicatedBackend. 24743/head
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 24 Oct 2018 19:10:10 +0000 (21:10 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 24 Oct 2018 19:14:48 +0000 (21:14 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/osd/PGBackend.h
src/osd/PrimaryLogPG.h
src/osd/ReplicatedBackend.cc

index e9b9d4441d973a483f4a604015f620c10f324dd5..989b2a4ea36011586e3ac0437d0488cec85b3dce 100644 (file)
@@ -206,6 +206,7 @@ typedef std::shared_ptr<const OSDMap> 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<const OSDMap> 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 {
index 262341d32d03b7a54d584b471ab4ba7b981297cc..5263a4ddad0621460f40758798aa5e8903e019ac 100644 (file)
@@ -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;
   }
index 2227f4767684ae4f098c05500518c8c0943f0fa6..f45ec600d1befbe4fa21f31f82b9db6bc6f7c930 100644 (file)
@@ -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);
 }