From: Casey Bodley Date: Fri, 22 Jul 2016 03:46:20 +0000 (-0400) Subject: rgw: change read_sync_status interface X-Git-Tag: v11.0.1~24^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b7cd4e0e8b879b5e528de75bea3307585b96cbf2;p=ceph.git rgw: change read_sync_status interface 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 --- diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index b457495e7f20..92730f873561 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -1787,14 +1787,13 @@ static void get_data_sync_status(const string& source_zone, list& 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); diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index 568ee2727d20..e333014dfc82 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -1521,18 +1521,12 @@ void RGWRemoteDataLog::wakeup(int shard_id, set& 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; diff --git a/src/rgw/rgw_data_sync.h b/src/rgw/rgw_data_sync.h index 0bdb15112857..1c950674c224 100644 --- a/src/rgw/rgw_data_sync.h +++ b/src/rgw/rgw_data_sync.h @@ -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& 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 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& keys) { return source_log.wakeup(shard_id, keys); } void stop() {