]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: dont spawn error_repo until lease is acquired 14714/head
authorCasey Bodley <cbodley@redhat.com>
Thu, 20 Apr 2017 20:33:32 +0000 (16:33 -0400)
committerCasey Bodley <cbodley@redhat.com>
Fri, 21 Apr 2017 13:52:28 +0000 (09:52 -0400)
if RGWDataSyncShardCR fails to acquire its lease, it doesn't call
error_repo->finish() to stop the coroutine. wait until the lease
succeeds before spawning the error_repo

Fixes: http://tracker.ceph.com/issues/19446
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_data_sync.cc

index cbe3a91d8e14033dbf77b9be28598f90d314a602..60bbcf621bca1ecd7cecb227d74748587e293bf5 100644 (file)
@@ -1240,11 +1240,6 @@ public:
 
   int incremental_sync() {
     reenter(&incremental_cr) {
-      error_repo = new RGWOmapAppend(sync_env->async_rados, sync_env->store,
-                                     rgw_raw_obj(pool, error_oid),
-                                     1 /* no buffer */);
-      error_repo->get();
-      spawn(error_repo, false);
       yield init_lease_cr();
       while (!lease_cr->is_locked()) {
         if (lease_cr->is_done()) {
@@ -1256,6 +1251,11 @@ public:
         yield;
       }
       set_status("lease acquired");
+      error_repo = new RGWOmapAppend(sync_env->async_rados, sync_env->store,
+                                     rgw_raw_obj(pool, error_oid),
+                                     1 /* no buffer */);
+      error_repo->get();
+      spawn(error_repo, false);
       logger.log("inc sync");
       set_marker_tracker(new RGWDataSyncShardMarkerTrack(sync_env, status_oid, sync_marker));
       do {