{
const osd_id_t from = m->get_source().num();
const epoch_t osdmap_epoch = service.get_map()->get_epoch();
+ const epoch_t peer_epoch = m->map_epoch;
+ auto found = peers.find(from);
+ if (found == peers.end()) {
+ return seastar::now();
+ }
+ auto& peer = found->second;
+
+ if (peer_epoch > peer.get_last_epoch_sent()) {
+ logger().debug("{} updating session's last epoch sent "
+ "from {} to peer's (id: {}) map epoch of {}",
+ __func__, peer.get_last_epoch_sent(),
+ from, peer_epoch);
+ peer.set_last_epoch_sent(peer_epoch);
+ }
+
+ if (osdmap_epoch <= peer.get_last_epoch_sent()) {
+ logger().info("{} latest epoch sent {} is already later "
+ "than osdmap epoch of {}",
+ __func__ , peer.get_last_epoch_sent(),
+ osdmap_epoch);
+ return seastar::now();
+ }
+
logger().info("{} peer id: {} epoch is {} while osdmap is {}",
__func__ , from, m->map_epoch, osdmap_epoch);
if (osdmap_epoch > m->map_epoch) {
void set_epoch_added(epoch_t epoch_) { epoch = epoch_; }
epoch_t get_epoch_added() const { return epoch; }
+
+ void set_last_epoch_sent(epoch_t epoch_) { last_sent_epoch = epoch_; }
+ epoch_t get_last_epoch_sent() const { return last_sent_epoch; }
+
bool is_started() const { return connected; }
bool pinged() const {
if (clock::is_zero(first_tx)) {
clock::time_point last_rx_back;
// most recent epoch we wanted this peer
epoch_t epoch; // rename me to epoch_added
+ // last epoch sent
+ epoch_t last_sent_epoch = 0;
struct reply_t {
clock::time_point deadline;
void set_epoch_added(epoch_t epoch) { session.set_epoch_added(epoch); }
epoch_t get_epoch_added() const { return session.get_epoch_added(); }
+ void set_last_epoch_sent(epoch_t epoch) { session.set_last_epoch_sent(epoch); }
+ epoch_t get_last_epoch_sent() const { return session.get_last_epoch_sent(); }
+
// if failure, return time_point since last active
// else, return clock::zero()
clock::time_point failed_since(clock::time_point now) const {