]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: data sync fixes
authorYehuda Sadeh <yehuda@redhat.com>
Thu, 12 Nov 2015 00:10:52 +0000 (16:10 -0800)
committerYehuda Sadeh <yehuda@redhat.com>
Fri, 12 Feb 2016 00:13:32 +0000 (16:13 -0800)
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_data_sync.cc

index c8a613849c367c78dd8ea03bdd7a30770ec68123..7e52b9ea6f51dd563d28ecb170898b9fe76690c9 100644 (file)
@@ -1053,6 +1053,7 @@ class RGWDataSyncCR : public RGWCoroutine {
   RGWAsyncRadosProcessor *async_rados;
   RGWRESTConn *conn;
   string source_zone;
+  uint32_t num_shards;
 
   RGWObjectCtx obj_ctx;
 
@@ -1067,11 +1068,12 @@ class RGWDataSyncCR : public RGWCoroutine {
 
 public:
   RGWDataSyncCR(RGWRados *_store, RGWHTTPManager *_mgr, RGWAsyncRadosProcessor *_async_rados,
-                RGWRESTConn *_conn, const string& _source_zone, bool *_reset_backoff) : RGWCoroutine(_store->ctx()), store(_store),
+                RGWRESTConn *_conn, const string& _source_zone, uint32_t _num_shards, bool *_reset_backoff) : RGWCoroutine(_store->ctx()), store(_store),
                                                       http_manager(_mgr),
                                                      async_rados(_async_rados),
                                                       conn(_conn),
                                                       source_zone(_source_zone),
+                                                      num_shards(_num_shards),
                                                       obj_ctx(store),
                                                       marker_tracker(NULL),
                                                       shard_crs_lock("RGWDataSyncCR::shard_crs_lock"),
@@ -1091,7 +1093,7 @@ public:
         }
       }
 
-      if (retcode < 0) {
+      if (retcode < 0 && retcode != -ENOENT) {
         ldout(store->ctx(), 0) << "ERROR: failed to fetch sync status, retcode=" << retcode << dendl;
         return set_cr_error(retcode);
       }
@@ -1110,6 +1112,7 @@ public:
           ldout(store->ctx(), 0) << "ERROR: failed to init sync, retcode=" << retcode << dendl;
           return set_cr_error(retcode);
         }
+        sync_status.sync_info.num_shards = num_shards;
         sync_status.sync_info.state = rgw_data_sync_info::StateBuildingFullSyncMaps;
         /* update new state */
         yield {
@@ -1201,18 +1204,19 @@ class RGWDataSyncControlCR : public RGWBackoffControlCR
   RGWAsyncRadosProcessor *async_rados;
   RGWRESTConn *conn;
   string source_zone;
+  uint32_t num_shards;
 
 public:
   RGWDataSyncControlCR(RGWRados *_store, RGWHTTPManager *_mgr, RGWAsyncRadosProcessor *_async_rados,
-                RGWRESTConn *_conn, const string& _source_zone) : RGWBackoffControlCR(_store->ctx()), store(_store),
+                RGWRESTConn *_conn, const string& _source_zone, uint32_t _num_shards) : RGWBackoffControlCR(_store->ctx()), store(_store),
                                                       http_manager(_mgr),
                                                      async_rados(_async_rados),
                                                       conn(_conn),
-                                                      source_zone(_source_zone) {
+                                                      source_zone(_source_zone), num_shards(_num_shards) {
   }
 
   RGWCoroutine *alloc_cr() {
-    return new RGWDataSyncCR(store, http_manager, async_rados, conn, source_zone, backoff_ptr());
+    return new RGWDataSyncCR(store, http_manager, async_rados, conn, source_zone, num_shards, backoff_ptr());
   }
 
   void wakeup(int shard_id, set<string>& keys) {
@@ -1244,7 +1248,7 @@ int RGWRemoteDataLog::run_sync(int num_shards, rgw_data_sync_status& sync_status
   }
   
   lock.get_write();
-  data_sync_cr = new RGWDataSyncControlCR(store, &http_manager, async_rados, conn, source_zone);
+  data_sync_cr = new RGWDataSyncControlCR(store, &http_manager, async_rados, conn, source_zone, num_shards);
   data_sync_cr->get();
   lock.unlock();
   r = run(data_sync_cr);
@@ -2195,7 +2199,7 @@ int RGWRunBucketSyncCoroutine::operate()
       }
     }
 
-    if (retcode < 0) {
+    if (retcode < 0 && retcode != -ENOENT) {
       ldout(store->ctx(), 0) << "ERROR: failed to retrieve bucket info for bucket=" << bucket_name << " bucket_id=" << bucket_id << dendl;
       return set_cr_error(retcode);
     }