]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: update heartbeat_info.epoch
authorKefu Chai <kchai@redhat.com>
Sun, 3 Feb 2019 11:16:26 +0000 (19:16 +0800)
committerKefu Chai <kchai@redhat.com>
Sun, 3 Feb 2019 12:08:49 +0000 (20:08 +0800)
it's used for trimming peers if the number of heartbeat peers exceeds
`osd_heartbeat_min_peers`.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/heartbeat.cc
src/crimson/osd/heartbeat.h
src/crimson/osd/osd.cc

index c19ef809dff85821d2859f3259361118e7737b59..5f1e769afb20a8c6956c2b00f7964deb81d67b1b 100644 (file)
@@ -77,7 +77,7 @@ const entity_addrvec_t& Heartbeat::get_back_addrs() const
   return back_msgr->get_myaddrs();
 }
 
-void Heartbeat::add_peer(osd_id_t peer)
+void Heartbeat::add_peer(osd_id_t peer, epoch_t epoch)
 {
   auto found = peers.find(peer);
   if (found == peers.end()) {
@@ -91,7 +91,10 @@ void Heartbeat::add_peer(osd_id_t peer)
     info.con_back =
       back_msgr->connect(osdmap->get_hb_back_addrs(peer).legacy_addr(),
                          CEPH_ENTITY_TYPE_OSD);
+    info.epoch = epoch;
     peers.emplace(peer, std::move(info));
+  } else {
+    found->second.epoch = epoch;
   }
 }
 
index f59bbabe56f8e1ba31ae348e3ee44e37cc018340..2304af4402978f574847197894e490e00432ed59 100644 (file)
@@ -31,7 +31,7 @@ public:
                          entity_addrvec_t back);
   seastar::future<> stop();
 
-  void add_peer(osd_id_t peer);
+  void add_peer(osd_id_t peer, epoch_t epoch);
   seastar::future<> remove_peer(osd_id_t peer);
 
   seastar::future<> send_heartbeats();
@@ -83,6 +83,8 @@ private:
     clock::time_point last_rx_front;
     /// last time we got a ping reply on the back side
     clock::time_point last_rx_back;
+    /// most recent epoch we wanted this peer
+    epoch_t epoch;
     /// history of inflight pings, arranging by timestamp we sent
     std::map<utime_t, reply_t> ping_history;
 
index 7b465c336828de5bc0315286fd592d5d69b01f1d..c064d7676d5e1ae0fa09b4638bbf5b8d32a84824 100644 (file)
@@ -598,7 +598,7 @@ void OSD::update_heartbeat_peers()
                                  &acting, nullptr);
     for (auto osd : boost::join(up, acting)) {
       if (osd != CRUSH_ITEM_NONE) {
-        heartbeat->add_peer(osd);
+        heartbeat->add_peer(osd, osdmap->get_epoch());
       }
     }
   }