]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix data sync initialization
authorYehuda Sadeh <yehuda@redhat.com>
Mon, 2 Nov 2015 18:43:24 +0000 (10:43 -0800)
committerYehuda Sadeh <yehuda@redhat.com>
Fri, 12 Feb 2016 00:13:27 +0000 (16:13 -0800)
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_data_sync.cc
src/rgw/rgw_data_sync.h
src/rgw/rgw_rados.cc

index 315014a84c9c3f25bef606d41673372efb54caec..254d69b8745174ed6a643b7da4d63e8d9d6783bf 100644 (file)
@@ -353,6 +353,10 @@ int RGWRemoteDataLog::read_log_info(rgw_datalog_info *log_info)
 
 int RGWRemoteDataLog::init(const string& _source_zone, RGWRESTConn *_conn)
 {
+  if (initialized) {
+    return 0;
+  }
+
   CephContext *cct = store->ctx();
   async_rados = new RGWAsyncRadosProcessor(store, cct->_conf->rgw_num_async_rados_threads);
   async_rados->start();
@@ -362,10 +366,15 @@ int RGWRemoteDataLog::init(const string& _source_zone, RGWRESTConn *_conn)
 
   int ret = http_manager.set_threaded();
   if (ret < 0) {
+    async_rados->stop();
+    delete async_rados;
+    async_rados = NULL;
     ldout(store->ctx(), 0) << "failed in http_manager.set_threaded() ret=" << ret << dendl;
     return ret;
   }
 
+  initialized = true;
+
   return 0;
 }
 
index 787804bff610c5a8f70048a605453779bcd9c69b..3d08272b29cfdb007db50d7af5eb8de8070ae1ca 100644 (file)
@@ -141,11 +141,14 @@ class RGWRemoteDataLog : public RGWCoroutinesManager {
   RWLock lock;
   RGWDataSyncCR *data_sync_cr;
 
+  bool initialized;
+
 public:
   RGWRemoteDataLog(RGWRados *_store, RGWDataSyncStatusManager *_sm) : RGWCoroutinesManager(_store->ctx()), store(_store),
                                        conn(NULL),
                                        http_manager(store->ctx(), &completion_mgr),
-                                       status_manager(_sm), lock("RGWRemoteDataLog::lock"), data_sync_cr(NULL) {}
+                                       status_manager(_sm), lock("RGWRemoteDataLog::lock"), data_sync_cr(NULL),
+                                       initialized(false) {}
 
   int init(const string& _source_zone, RGWRESTConn *_conn);
   void finish();
index 3959af74bc676312fcd2b2643a79c62d220f9f90..763bc9e29e2ba78c5c1a8d289b4a3ed29467c8a4 100644 (file)
@@ -2703,7 +2703,7 @@ class RGWDataSyncProcessorThread : public RGWSyncProcessorThread
       return 0; /* no interval associated, it'll run once until stopped */
     } else {
 #define DATA_SYNC_INIT_WAIT_SEC 20
-      return DATA_SYNC_INIT_WAIT_SEC;
+      return DATA_SYNC_INIT_WAIT_SEC * 1000;
     }
   }
   void stop_process() {