]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: create sync-module instance when execute radosgw-admin data sync run 18898/head
authorlvshanchun <lvshanchun@gmail.com>
Tue, 19 Dec 2017 02:53:06 +0000 (10:53 +0800)
committerlvshanchun <lvshanchun@gmail.com>
Tue, 19 Dec 2017 02:53:06 +0000 (10:53 +0800)
Signed-off-by: lvshanchun <lvshanchun@gmail.com>
src/rgw/rgw_admin.cc
src/rgw/rgw_data_sync.cc
src/rgw/rgw_data_sync.h

index c6d06067f4625e4d9b9534fa3cdec1e0cb0f1b52..183a37eeec8af3bfe9e4c6b879f9325039f9c03f 100644 (file)
@@ -6469,9 +6469,18 @@ next:
       cerr << "ERROR: source zone not specified" << std::endl;
       return EINVAL;
     }
-    RGWDataSyncStatusManager sync(store, store->get_async_rados(), source_zone);
 
-    int ret = sync.init();
+    RGWSyncModuleInstanceRef sync_module;
+    int ret = store->get_sync_modules_manager()->create_instance(g_ceph_context, store->get_zone().tier_type, 
+        store->get_zone_params().tier_config, &sync_module);
+    if (ret < 0) {
+      lderr(cct) << "ERROR: failed to init sync module instance, ret=" << ret << dendl;
+      return ret;
+    }
+
+    RGWDataSyncStatusManager sync(store, store->get_async_rados(), source_zone, sync_module);
+
+    ret = sync.init();
     if (ret < 0) {
       cerr << "ERROR: sync.init() returned ret=" << ret << std::endl;
       return -ret;
index 6d3f01d40ebe888a877b5cc6eda38c229925e9b4..e4be405498676cbe1735d9b263282ba6c81fff34 100644 (file)
@@ -1775,7 +1775,9 @@ int RGWDataSyncStatusManager::init()
 
   RGWZoneParams& zone_params = store->get_zone_params();
 
-  sync_module = store->get_sync_module();
+  if (sync_module == nullptr) { 
+    sync_module = store->get_sync_module();
+  }
 
   conn = store->get_zone_conn_by_id(source_zone);
   if (!conn) {
index 6e45b932c3e0b0d01ee05f57ef853437c6de9cdb..4623836bb87222e10534dd51c07bc175c638b02a 100644 (file)
@@ -311,6 +311,12 @@ public:
     : store(_store), source_zone(_source_zone), conn(NULL), error_logger(NULL),
       sync_module(nullptr),
       source_log(store, async_rados, observer), num_shards(0) {}
+  RGWDataSyncStatusManager(RGWRados *_store, RGWAsyncRadosProcessor *async_rados,
+                           const string& _source_zone, const RGWSyncModuleInstanceRef& _sync_module,
+                           rgw::BucketChangeObserver *observer = nullptr)
+    : store(_store), source_zone(_source_zone), conn(NULL), error_logger(NULL),
+      sync_module(_sync_module),
+      source_log(store, async_rados, observer), num_shards(0) {}
   ~RGWDataSyncStatusManager() {
     finalize();
   }