From: Casey Bodley Date: Thu, 20 Apr 2017 20:33:32 +0000 (-0400) Subject: rgw: dont spawn error_repo until lease is acquired X-Git-Tag: v12.0.3~222^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1524a5eb249113fed8da1d47a4f92dec98db4566;p=ceph.git rgw: dont spawn error_repo until lease is acquired if RGWDataSyncShardCR fails to acquire its lease, it doesn't call error_repo->finish() to stop the coroutine. wait until the lease succeeds before spawning the error_repo Fixes: http://tracker.ceph.com/issues/19446 Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index cbe3a91d8e14..60bbcf621bca 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -1240,11 +1240,6 @@ public: int incremental_sync() { reenter(&incremental_cr) { - error_repo = new RGWOmapAppend(sync_env->async_rados, sync_env->store, - rgw_raw_obj(pool, error_oid), - 1 /* no buffer */); - error_repo->get(); - spawn(error_repo, false); yield init_lease_cr(); while (!lease_cr->is_locked()) { if (lease_cr->is_done()) { @@ -1256,6 +1251,11 @@ public: yield; } set_status("lease acquired"); + error_repo = new RGWOmapAppend(sync_env->async_rados, sync_env->store, + rgw_raw_obj(pool, error_oid), + 1 /* no buffer */); + error_repo->get(); + spawn(error_repo, false); logger.log("inc sync"); set_marker_tracker(new RGWDataSyncShardMarkerTrack(sync_env, status_oid, sync_marker)); do {