From 33f4f22193b79384c1fdd6cd7731d5c0a30bbb31 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 7 Sep 2018 16:05:01 -0500 Subject: [PATCH] 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 --- src/osd/OSD.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 57f6d9fa06312..80163edabe6b5 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; -- 2.39.5