]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: DataSyncShardCR only locks once at the very top
authorCasey Bodley <cbodley@redhat.com>
Mon, 8 Aug 2022 20:35:40 +0000 (16:35 -0400)
committerCasey Bodley <cbodley@redhat.com>
Tue, 9 Aug 2022 19:29:21 +0000 (15:29 -0400)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_data_sync.cc

index 16c8726b11f7129182996ce13485ad1535d07623..60bdddca82dac4ed3a57dc0e6e01111e0a8b00f7 100644 (file)
@@ -2026,21 +2026,21 @@ public:
 
   int operate(const DoutPrefixProvider *dpp) override {
     reenter(this) {
+      yield init_lease_cr();
+      while (!lease_cr->is_locked()) {
+        if (lease_cr->is_done()) {
+          tn->log(5, "failed to take lease");
+          set_status("lease lock failed, early abort");
+          drain_all();
+          return set_cr_error(lease_cr->get_ret_status());
+        }
+        set_sleeping(true);
+        yield;
+      }
+      tn->log(10, "took lease");
+
       while (true) {
        if (sync_marker.state == rgw_data_sync_marker::FullSync) {
-         yield init_lease_cr();
-         while (!lease_cr->is_locked()) {
-           if (lease_cr->is_done()) {
-             tn->log(5, "failed to take lease");
-             set_status("lease lock failed, early abort");
-             drain_all();
-             return set_cr_error(lease_cr->get_ret_status());
-           }
-           set_sleeping(true);
-           yield;
-         }
-         tn->log(10, "took lease");
-
          yield call(new RGWDataFullSyncShardCR(sc, pool, shard_id,
                                                sync_marker, tn,
                                                status_oid, error_repo,
@@ -2053,23 +2053,6 @@ public:
            return set_cr_error(retcode);
          }
        } else if (sync_marker.state == rgw_data_sync_marker::IncrementalSync) {
-         if (lease_cr) {
-           tn->log(10, "lease already held from full sync");
-         } else {
-           yield init_lease_cr();
-           while (!lease_cr->is_locked()) {
-             if (lease_cr->is_done()) {
-               tn->log(5, "failed to take lease");
-               set_status("lease lock failed, early abort");
-               drain_all();
-               return set_cr_error(lease_cr->get_ret_status());
-             }
-             set_sleeping(true);
-             yield;
-           }
-           set_status("lease acquired");
-           tn->log(10, "took lease");
-         }
          yield call(new RGWDataIncSyncShardCR(sc, pool, shard_id,
                                               sync_marker, tn,
                                               status_oid, error_repo,