]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: avoid dropping osd_lock when pg osdmaps are not laggy
authorSage Weil <sage@redhat.com>
Fri, 7 Sep 2018 21:05:01 +0000 (16:05 -0500)
committerSage Weil <sage@redhat.com>
Mon, 17 Sep 2018 17:52:46 +0000 (12:52 -0500)
We only need to drop the lock if we are going to block.

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSD.cc

index 57f6d9fa06312fc70a91308e096e951d701bd0a3..80163edabe6b57b94c647469cee02ea85e3f57bf 100644 (file)
@@ -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;