From: Sage Weil Date: Tue, 30 Jul 2019 00:34:29 +0000 (-0500) Subject: osd: move heartbeat connection cleanup to helper X-Git-Tag: v15.1.0~1952^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=8d155d0f67de5d15773dac2e0a90160d7d2c6c5e;p=ceph-ci.git osd: move heartbeat connection cleanup to helper Signed-off-by: Sage Weil --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 61fef2a6208..b76c9f05210 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -4394,12 +4394,7 @@ void OSD::_remove_heartbeat_peer(int n) << " " << q->second.con_back->get_peer_addr() << " " << (q->second.con_front ? q->second.con_front->get_peer_addr() : entity_addr_t()) << dendl; - q->second.con_back->mark_down(); - q->second.con_back->clear_priv(); - if (q->second.con_front) { - q->second.con_front->mark_down(); - q->second.con_front->clear_priv(); - } + q->second.clear_mark_down(); heartbeat_peers.erase(q); } @@ -4528,12 +4523,7 @@ void OSD::reset_heartbeat_peers(bool all) for (auto it = heartbeat_peers.begin(); it != heartbeat_peers.end();) { HeartbeatInfo& hi = it->second; if (all || hi.is_stale(stale)) { - hi.con_back->mark_down(); - hi.con_back->clear_priv(); - if (hi.con_front) { - hi.con_front->mark_down(); - hi.con_front->clear_priv(); - } + hi.clear_mark_down(); // stop sending failure_report to mon too failure_queue.erase(it->first); heartbeat_peers.erase(it++); @@ -4950,16 +4940,7 @@ bool OSD::heartbeat_reset(Connection *con) p->second.con_front == con)) { dout(10) << "heartbeat_reset failed hb con " << con << " for osd." << p->second.peer << ", reopening" << dendl; - if (con != p->second.con_back) { - p->second.con_back->mark_down(); - p->second.con_back->clear_priv(); - } - p->second.con_back.reset(NULL); - if (p->second.con_front && con != p->second.con_front) { - p->second.con_front->mark_down(); - p->second.con_front->clear_priv(); - } - p->second.con_front.reset(NULL); + p->second.clear_mark_down(con); pair newcon = service.get_con_osd_hb(p->second.peer, p->second.epoch); if (newcon.first) { p->second.con_back = newcon.first.get(); @@ -7578,12 +7559,7 @@ void OSD::note_down_osd(int peer) failure_pending.erase(peer); map::iterator p = heartbeat_peers.find(peer); if (p != heartbeat_peers.end()) { - p->second.con_back->mark_down(); - p->second.con_back->clear_priv(); - if (p->second.con_front) { - p->second.con_front->mark_down(); - p->second.con_front->clear_priv(); - } + p->second.clear_mark_down(); heartbeat_peers.erase(p); } } diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 5b2a5f21078..000132d2348 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1444,6 +1444,19 @@ private: } return !is_unhealthy(now); } + + void clear_mark_down(Connection *except = nullptr) { + if (con_back && con_back != except) { + con_back->mark_down(); + con_back->clear_priv(); + con_back.reset(nullptr); + } + if (con_front && con_front != except) { + con_front->mark_down(); + con_front->clear_priv(); + con_front.reset(nullptr); + } + } }; ceph::mutex heartbeat_lock = ceph::make_mutex("OSD::heartbeat_lock");