From: Yingxin Cheng Date: Fri, 27 Mar 2020 07:33:27 +0000 (+0800) Subject: crimson/osd: heartbeat handle reset by lookup X-Git-Tag: v16.1.0~1895^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3f31541cb6496d36bcfedf4923f43eb235d8df16;p=ceph.git 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 --- diff --git a/src/crimson/osd/heartbeat.cc b/src/crimson/osd/heartbeat.cc index 0e207e0f1720..8d4e71de1aee 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)