From: Sage Weil Date: Fri, 7 Sep 2018 21:05:01 +0000 (-0500) Subject: osd: avoid dropping osd_lock when pg osdmaps are not laggy X-Git-Tag: v14.0.1~211^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=33f4f22193b79384c1fdd6cd7731d5c0a30bbb31;p=ceph.git osd: avoid dropping osd_lock when pg osdmaps are not laggy We only need to drop the lock if we are going to block. Signed-off-by: Sage Weil --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 57f6d9fa0631..80163edabe6b 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -7448,7 +7448,15 @@ void OSD::handle_osd_map(MOSDMap *m) 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;