From: Kefu Chai Date: Sun, 3 Feb 2019 11:16:26 +0000 (+0800) Subject: crimson/osd: update heartbeat_info.epoch X-Git-Tag: v14.1.0~159^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=02a99fbf332c461701b6f5555734a86c1af08fcc;p=ceph.git crimson/osd: update heartbeat_info.epoch it's used for trimming peers if the number of heartbeat peers exceeds `osd_heartbeat_min_peers`. Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/heartbeat.cc b/src/crimson/osd/heartbeat.cc index c19ef809dff8..5f1e769afb20 100644 --- a/src/crimson/osd/heartbeat.cc +++ b/src/crimson/osd/heartbeat.cc @@ -77,7 +77,7 @@ const entity_addrvec_t& Heartbeat::get_back_addrs() const return back_msgr->get_myaddrs(); } -void Heartbeat::add_peer(osd_id_t peer) +void Heartbeat::add_peer(osd_id_t peer, epoch_t epoch) { auto found = peers.find(peer); if (found == peers.end()) { @@ -91,7 +91,10 @@ void Heartbeat::add_peer(osd_id_t peer) info.con_back = back_msgr->connect(osdmap->get_hb_back_addrs(peer).legacy_addr(), CEPH_ENTITY_TYPE_OSD); + info.epoch = epoch; peers.emplace(peer, std::move(info)); + } else { + found->second.epoch = epoch; } } diff --git a/src/crimson/osd/heartbeat.h b/src/crimson/osd/heartbeat.h index f59bbabe56f8..2304af440297 100644 --- a/src/crimson/osd/heartbeat.h +++ b/src/crimson/osd/heartbeat.h @@ -31,7 +31,7 @@ public: entity_addrvec_t back); seastar::future<> stop(); - void add_peer(osd_id_t peer); + void add_peer(osd_id_t peer, epoch_t epoch); seastar::future<> remove_peer(osd_id_t peer); seastar::future<> send_heartbeats(); @@ -83,6 +83,8 @@ private: clock::time_point last_rx_front; /// last time we got a ping reply on the back side clock::time_point last_rx_back; + /// most recent epoch we wanted this peer + epoch_t epoch; /// history of inflight pings, arranging by timestamp we sent std::map ping_history; diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 7b465c336828..c064d7676d5e 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -598,7 +598,7 @@ void OSD::update_heartbeat_peers() &acting, nullptr); for (auto osd : boost::join(up, acting)) { if (osd != CRUSH_ITEM_NONE) { - heartbeat->add_peer(osd); + heartbeat->add_peer(osd, osdmap->get_epoch()); } } }