]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: enforce spawn_window for data full sync
authorCasey Bodley <cbodley@redhat.com>
Fri, 10 Aug 2018 20:34:42 +0000 (16:34 -0400)
committerJonathan Brielmaier <jbrielmaier@suse.de>
Tue, 30 Oct 2018 15:12:21 +0000 (16:12 +0100)
limit the number of concurrent bucket sync crs spawned by data full sync

Fixes: http://tracker.ceph.com/issues/26897
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit 895c28a)
Signed-off-by: Jonathan Brielmaier <jbrielmaier@suse.de>
Conflicts:
src/rgw/rgw_data_sync.cc: parameters in yield spawn

src/rgw/rgw_data_sync.cc

index 786761a92c06a672b853145bbe0fb26cc3505c73..5f47ef8ae63744a8da8379c7cf5df56c098d7adb 100644 (file)
@@ -1268,13 +1268,19 @@ public:
           } else {
             // fetch remote and write locally
             yield spawn(new RGWDataSyncSingleEntryCR(sync_env, *iter, *iter, marker_tracker, error_repo, false), false);
-            if (retcode < 0) {
-              lease_cr->go_down();
-              drain_all();
-              return set_cr_error(retcode);
-            }
           }
           sync_marker.marker = *iter;
+
+          while ((int)num_spawned() > spawn_window) {
+            set_status() << "num_spawned() > spawn_window";
+            yield wait_for_child();
+            int ret;
+            while (collect(&ret, lease_stack.get())) {
+              if (ret < 0) {
+                tn->log(10, "a sync operation returned error");
+              }
+            }
+          }
         }
       } while ((int)entries.size() == max_entries);