]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: implement Heartbeat::ms_handle_reset()
authorKefu Chai <kchai@redhat.com>
Fri, 8 Mar 2019 11:45:57 +0000 (19:45 +0800)
committerKefu Chai <kchai@redhat.com>
Wed, 20 Mar 2019 03:37:03 +0000 (11:37 +0800)
reconnect to peer if the connection is reset

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/heartbeat.cc
src/crimson/osd/heartbeat.h

index c1efce85c2e41b57118adf84b004a9c564fd0708..86ff8fa2a7b2b13ae1ff1084a80405894e3461ed 100644 (file)
@@ -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<MOSDPing> m)
 {
index f1565cf466e3a9cf27c4fd3d74ce9f94b072f7c6..63b893fcc9835876f31bf30cc9f5246283a610ab 100644 (file)
@@ -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: