]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: heartbeat handle reset by lookup
authorYingxin Cheng <yingxin.cheng@intel.com>
Fri, 27 Mar 2020 07:33:27 +0000 (15:33 +0800)
committerKefu Chai <kchai@redhat.com>
Mon, 15 Jun 2020 14:06:42 +0000 (22:06 +0800)
use map lookup instead of linear search to find peer during reset, and
connect to the heartbeat peer by entity_name_t.

Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/osd/heartbeat.cc

index 0e207e0f172041b646c128759993c58840195af5..8d4e71de1aee4d73bf8df423f70211ad8f54be0b 100644 (file)
@@ -203,10 +203,14 @@ seastar::future<> Heartbeat::ms_dispatch(crimson::net::Connection* conn,
 
 void Heartbeat::ms_handle_reset(crimson::net::ConnectionRef conn, bool is_replace)
 {
-  // TODO: we should already have enough information to know which peer the
-  // conn belongs, so no need to do linear search here.
-  for (auto& [osd, peer] : peers) {
-    peer.handle_reset(conn);
+  auto peer = conn->get_peer_id();
+  if (conn->get_peer_type() != entity_name_t::TYPE_OSD ||
+      peer == entity_name_t::NEW) {
+    return;
+  }
+  if (auto found = peers.find(peer);
+      found != peers.end()) {
+    found->second.handle_reset(conn);
   }
 }
 
@@ -324,9 +328,11 @@ void Heartbeat::Peer::connect()
   auto osdmap = heartbeat.service.get_osdmap_service().get_map();
   // TODO: use addrs
   con_front = heartbeat.front_msgr->connect(
-      osdmap->get_hb_front_addrs(peer).front(), CEPH_ENTITY_TYPE_OSD);
+      osdmap->get_hb_front_addrs(peer).front(),
+      entity_name_t(CEPH_ENTITY_TYPE_OSD, peer));
   con_back = heartbeat.back_msgr->connect(
-      osdmap->get_hb_back_addrs(peer).front(), CEPH_ENTITY_TYPE_OSD);
+      osdmap->get_hb_back_addrs(peer).front(),
+      entity_name_t(CEPH_ENTITY_TYPE_OSD, peer));
 }
 
 Heartbeat::Peer::Peer(Heartbeat& heartbeat, osd_id_t peer)