]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: bucket sync, don't drain_all() before shutting down lease cr
authorYehuda Sadeh <yehuda@redhat.com>
Fri, 4 Dec 2015 22:36:14 +0000 (14:36 -0800)
committerYehuda Sadeh <yehuda@redhat.com>
Fri, 12 Feb 2016 00:13:43 +0000 (16:13 -0800)
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_cr_rados.cc
src/rgw/rgw_data_sync.cc

index bc8c34a364359d61b761257ef0e94f6b1c50a37d..181e8e4b64ddd001a7aed1f4b866ff31bed6cb67 100644 (file)
@@ -534,6 +534,7 @@ int RGWAsyncRemoveObj::_send_request()
 int RGWContinuousLeaseCR::operate()
 {
   if (aborted) {
+    caller->set_sleeping(false);
     return set_cr_done();
   }
   reenter(this) {
index 78469578bd5e4fcf78ee26040672450026ef6ecc..f56d78ef02d25d38da3419274ad6458e3c8cfe07 100644 (file)
@@ -2034,6 +2034,7 @@ int RGWBucketShardFullSyncCR::operate()
       set_sleeping(true);
       yield;
     }
+    set_status("lock acquired");
     list_marker = full_marker.position;
     marker_tracker = new RGWBucketFullSyncShardMarkerTrack(store, async_rados, 
                                                            status_oid,
@@ -2041,10 +2042,12 @@ int RGWBucketShardFullSyncCR::operate()
 
     total_entries = full_marker.count;
     do {
+      set_status("listing remote bucket");
       ldout(store->ctx(), 20) << __func__ << "(): listing bucket for full sync" << dendl;
       yield call(new RGWListBucketShardCR(store, http_manager, async_rados, conn, bucket_name, bucket_id, shard_id,
                                       list_marker, &list_result));
       if (retcode < 0 && retcode != -ENOENT) {
+        set_status("failed bucket listing, going down");
         yield lease_cr->go_down();
         drain_all();
         return set_cr_error(retcode);
@@ -2077,8 +2080,9 @@ int RGWBucketShardFullSyncCR::operate()
         }
       }
     } while (list_result.is_truncated);
+    set_status("done iterating over all objects");
     /* wait for all operations to complete */
-    drain_all();
+    drain_all_but(1); /* still need to hold lease cr */
     /* update sync state to incremental */
     yield {
       rgw_bucket_shard_sync_info sync_status;
@@ -2090,6 +2094,7 @@ int RGWBucketShardFullSyncCR::operate()
                                           oid, attrs));
     }
     yield lease_cr->go_down();
+    drain_all();
     if (retcode < 0) {
       ldout(store->ctx(), 0) << "ERROR: failed to set sync state on bucket " << bucket_name << ":" << bucket_id << ":" << shard_id
         << " retcode=" << retcode << dendl;