]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: limit concurrency of metadata sync
authorCasey Bodley <cbodley@redhat.com>
Tue, 13 Jul 2021 17:18:27 +0000 (13:18 -0400)
committerCasey Bodley <cbodley@redhat.com>
Tue, 13 Jul 2021 18:17:00 +0000 (14:17 -0400)
limit the number of concurrent RGWMetaSyncSingleEntryCRs that each mdlog
shard is allowed to spawn. use META_SYNC_SPAWN_WINDOW=20 to match data-
and bucket sync

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_sync.cc

index 233a827ab326ff1ba1d71b55d027ef7f2f1b02d6..2689f6ea10887112826c9a4e74b3345dfcf6b9cf 100644 (file)
@@ -1393,6 +1393,8 @@ public:
   int state_store_mdlog_entries_complete();
 };
 
+#define META_SYNC_SPAWN_WINDOW 20
+
 class RGWMetaSyncShardCR : public RGWCoroutine {
   RGWMetaSyncEnv *sync_env;
 
@@ -1622,6 +1624,11 @@ public:
               stack_to_pos[stack] = marker;
               pos_to_prev[marker] = marker;
             }
+            // limit spawn window
+            while (num_spawned() > META_SYNC_SPAWN_WINDOW) {
+              yield wait_for_child();
+              collect_children();
+            }
           }
         }
         collect_children();
@@ -1810,6 +1817,11 @@ public:
                 stack_to_pos[stack] = log_iter->id;
                 pos_to_prev[log_iter->id] = marker;
               }
+              // limit spawn window
+              while (num_spawned() > META_SYNC_SPAWN_WINDOW) {
+                yield wait_for_child();
+                collect_children();
+              }
             }
             marker = log_iter->id;
           }