From: Kefu Chai Date: Fri, 8 Mar 2019 11:45:57 +0000 (+0800) Subject: crimson/osd: implement Heartbeat::ms_handle_reset() X-Git-Tag: v15.0.0~191^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=bd1d0b38ca8ff5cae758db54cd1509521d65efc1;p=ceph-ci.git crimson/osd: implement Heartbeat::ms_handle_reset() reconnect to peer if the connection is reset Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/heartbeat.cc b/src/crimson/osd/heartbeat.cc index c1efce85c2e..86ff8fa2a7b 100644 --- a/src/crimson/osd/heartbeat.cc +++ b/src/crimson/osd/heartbeat.cc @@ -236,6 +236,23 @@ seastar::future<> Heartbeat::ms_dispatch(ceph::net::ConnectionRef conn, } } +seastar::future<> Heartbeat::ms_handle_reset(ceph::net::ConnectionRef conn) +{ + auto found = std::find_if(peers.begin(), peers.end(), + [conn](const peers_map_t::value_type& peer) { + return (peer.second.con_front == conn || + peer.second.con_back == conn); + }); + if (found == peers.end()) { + return seastar::now(); + } + const auto peer = found->first; + const auto epoch = found->second.epoch; + return remove_peer(peer).then([peer, epoch, this] { + return add_peer(peer, epoch); + }); +} + seastar::future<> Heartbeat::handle_osd_ping(ceph::net::ConnectionRef conn, Ref m) { diff --git a/src/crimson/osd/heartbeat.h b/src/crimson/osd/heartbeat.h index f1565cf466e..63b893fcc98 100644 --- a/src/crimson/osd/heartbeat.h +++ b/src/crimson/osd/heartbeat.h @@ -44,6 +44,7 @@ public: // Dispatcher methods seastar::future<> ms_dispatch(ceph::net::ConnectionRef conn, MessageRef m) override; + seastar::future<> ms_handle_reset(ceph::net::ConnectionRef conn) override; AuthAuthorizer* ms_get_authorizer(peer_type_t peer) const override; private: