]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: change read_sync_status interface
authorCasey Bodley <cbodley@redhat.com>
Fri, 22 Jul 2016 03:46:20 +0000 (23:46 -0400)
committerCasey Bodley <cbodley@redhat.com>
Fri, 22 Jul 2016 15:26:24 +0000 (11:26 -0400)
RGWDataSyncStatusManager::read_sync_status() now operates on the given
parameter, rather than its internal member variable. this allows
multiple concurrent readers, which is needed for the rest interface

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_admin.cc
src/rgw/rgw_data_sync.cc
src/rgw/rgw_data_sync.h

index b457495e7f201b1048e4af6562dcbd10e2c8ea03..92730f8735618c255e9a2925af4daf273a7e7a15 100644 (file)
@@ -1787,14 +1787,13 @@ static void get_data_sync_status(const string& source_zone, list<string>& status
     return;
   }
 
-  ret = sync.read_sync_status();
+  rgw_data_sync_status sync_status;
+  ret = sync.read_sync_status(&sync_status);
   if (ret < 0 && ret != -ENOENT) {
     push_ss(ss, status, tab) << string("failed read sync status: ") + cpp_strerror(-ret);
     return;
   }
 
-  const rgw_data_sync_status& sync_status = sync.get_sync_status();
-
   string status_str;
   switch (sync_status.sync_info.state) {
     case rgw_data_sync_info::StateInit:
@@ -5090,14 +5089,13 @@ next:
       return -ret;
     }
 
-    ret = sync.read_sync_status();
+    rgw_data_sync_status sync_status;
+    ret = sync.read_sync_status(&sync_status);
     if (ret < 0 && ret != -ENOENT) {
       cerr << "ERROR: sync.read_sync_status() returned ret=" << ret << std::endl;
       return -ret;
     }
 
-    rgw_data_sync_status& sync_status = sync.get_sync_status();
-
     formatter->open_object_section("summary");
     encode_json("sync_status", sync_status, formatter);
 
index 568ee2727d2036cbb2d9d7d21b04ae10dbe81525..e333014dfc82464470ebfc924236ffc4e32c2063 100644 (file)
@@ -1521,18 +1521,12 @@ void RGWRemoteDataLog::wakeup(int shard_id, set<string>& keys) {
   data_sync_cr->wakeup(shard_id, keys);
 }
 
-int RGWRemoteDataLog::run_sync(int num_shards, rgw_data_sync_status& sync_status)
+int RGWRemoteDataLog::run_sync(int num_shards)
 {
-  int r = run(new RGWReadDataSyncStatusCoroutine(&sync_env, &sync_status));
-  if (r < 0 && r != -ENOENT) {
-    ldout(store->ctx(), 0) << "ERROR: failed to read sync status from source_zone=" << sync_env.source_zone << " r=" << r << dendl;
-    return r;
-  }
-  
   lock.get_write();
   data_sync_cr = new RGWDataSyncControlCR(&sync_env, num_shards);
   lock.unlock();
-  r = run(data_sync_cr);
+  int r = run(data_sync_cr);
   if (r < 0) {
     ldout(store->ctx(), 0) << "ERROR: failed to run sync" << dendl;
     return r;
index 0bdb151128578e8e6fb9aca227e80700698a7c31..1c950674c2245706e4b057f9f99977c7b9dccafe 100644 (file)
@@ -241,7 +241,7 @@ public:
   int get_shard_info(int shard_id);
   int read_sync_status(rgw_data_sync_status *sync_status);
   int init_sync_status(int num_shards);
-  int run_sync(int num_shards, rgw_data_sync_status& sync_status);
+  int run_sync(int num_shards);
 
   void wakeup(int shard_id, set<string>& keys);
 };
@@ -260,7 +260,6 @@ class RGWDataSyncStatusManager {
   string source_shard_status_oid_prefix;
   rgw_obj source_status_obj;
 
-  rgw_data_sync_status sync_status;
   map<int, rgw_obj> shard_objs;
 
   int num_shards;
@@ -276,12 +275,12 @@ public:
   int init();
   void finalize();
 
-  rgw_data_sync_status& get_sync_status() { return sync_status; }
-
   static string shard_obj_name(const string& source_zone, int shard_id);
   static string sync_status_oid(const string& source_zone);
 
-  int read_sync_status() { return source_log.read_sync_status(&sync_status); }
+  int read_sync_status(rgw_data_sync_status *sync_status) {
+    return source_log.read_sync_status(sync_status);
+  }
   int init_sync_status() { return source_log.init_sync_status(num_shards); }
 
   int read_log_info(rgw_datalog_info *log_info) {
@@ -294,7 +293,7 @@ public:
     return source_log.read_source_log_shards_next(shard_markers, result);
   }
 
-  int run() { return source_log.run_sync(num_shards, sync_status); }
+  int run() { return source_log.run_sync(num_shards); }
 
   void wakeup(int shard_id, set<string>& keys) { return source_log.wakeup(shard_id, keys); }
   void stop() {