From bd1d0b38ca8ff5cae758db54cd1509521d65efc1 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 8 Mar 2019 19:45:57 +0800 Subject: [PATCH] crimson/osd: implement Heartbeat::ms_handle_reset() reconnect to peer if the connection is reset Signed-off-by: Kefu Chai --- src/crimson/osd/heartbeat.cc | 17 +++++++++++++++++ src/crimson/osd/heartbeat.h | 1 + 2 files changed, 18 insertions(+) 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: -- 2.39.5