From 3f31541cb6496d36bcfedf4923f43eb235d8df16 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Fri, 27 Mar 2020 15:33:27 +0800 Subject: [PATCH] crimson/osd: heartbeat handle reset by lookup 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 --- src/crimson/osd/heartbeat.cc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/crimson/osd/heartbeat.cc b/src/crimson/osd/heartbeat.cc index 0e207e0f172..8d4e71de1ae 100644 --- a/src/crimson/osd/heartbeat.cc +++ b/src/crimson/osd/heartbeat.cc @@ -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) -- 2.39.5