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()) {
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;
}
}
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();
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<utime_t, reply_t> ping_history;
&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());
}
}
}