]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: use separate cr manager for read_sync_status
authorCasey Bodley <cbodley@redhat.com>
Fri, 22 Jul 2016 15:00:16 +0000 (11:00 -0400)
committerCasey Bodley <cbodley@redhat.com>
Thu, 6 Apr 2017 19:04:37 +0000 (15:04 -0400)
RGWCoroutinesManager::run() is not reentrant, so concurrent users of
read_sync_status() must use different managers

Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit 6b1e40d7a21c549b55e6576ec56973c8d3c092d1)

src/rgw/rgw_data_sync.cc

index 4aa130b6921823130de3412f974017f2eb34347c..3d946505f1430c10d0a456140746e67c174ae70e 100644 (file)
@@ -593,12 +593,15 @@ int RGWRemoteDataLog::get_shard_info(int shard_id)
 
 int RGWRemoteDataLog::read_sync_status(rgw_data_sync_status *sync_status)
 {
-  return run(new RGWReadDataSyncStatusCoroutine(&sync_env, sync_status));
+  // cannot run concurrently with run_sync(), so run in a separate manager
+  RGWCoroutinesManager crs(store->ctx(), nullptr);
+  return crs.run(new RGWReadDataSyncStatusCoroutine(&sync_env, sync_status));
 }
 
 int RGWRemoteDataLog::init_sync_status(int num_shards)
 {
-  return run(new RGWInitDataSyncStatusCoroutine(&sync_env, num_shards));
+  RGWCoroutinesManager crs(store->ctx(), nullptr);
+  return crs.run(new RGWInitDataSyncStatusCoroutine(&sync_env, num_shards));
 }
 
 static string full_data_sync_index_shard_oid(const string& source_zone, int shard_id)