epoch_t max_lag = cct->_conf->osd_map_cache_size *
m_osd_pg_epoch_max_lag_factor;
ceph_assert(max_lag > 0);
- if (osdmap->get_epoch() > max_lag) {
+ epoch_t osd_min = 0;
+ for (auto shard : shards) {
+ epoch_t min = shard->get_min_pg_epoch();
+ if (osd_min == 0 || min < osd_min) {
+ osd_min = min;
+ }
+ }
+ if (osdmap->get_epoch() > max_lag &&
+ osdmap->get_epoch() - max_lag > osd_min) {
epoch_t need = osdmap->get_epoch() - max_lag;
dout(10) << __func__ << " waiting for pgs to catch up (need " << need
<< " max_lag " << max_lag << ")" << dendl;