From 0d928c26408f2fa0b276304c4c00e9c41e0777fa Mon Sep 17 00:00:00 2001 From: Zengran Zhang Date: Wed, 19 Oct 2016 17:05:27 +0800 Subject: [PATCH] rgw multisite: fix the increamtal bucket sync init in the `RGWBucketShardFullSyncCR::operate`, inc_marker will assigned with remote bilog's max_marker. but the sync_status's inc_marker cant be assigned.so the next step inc sync will always sync from null log,which means at beginning log. Fixes: http://tracker.ceph.com/issues/17624 Signed-off-by: Zengran Zhang --- src/rgw/rgw_data_sync.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index 1cd2e02974c..b25be6103ea 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -1747,13 +1747,14 @@ class RGWInitBucketShardSyncStatusCoroutine : public RGWCoroutine { string lock_name; string cookie; - rgw_bucket_shard_sync_info status; + rgw_bucket_shard_sync_info& status; bucket_index_marker_info info; public: RGWInitBucketShardSyncStatusCoroutine(RGWDataSyncEnv *_sync_env, - const rgw_bucket_shard& bs) - : RGWCoroutine(_sync_env->cct), sync_env(_sync_env), bs(bs) { + const rgw_bucket_shard& bs, + rgw_bucket_shard_sync_info& _status) + : RGWCoroutine(_sync_env->cct), sync_env(_sync_env), bs(bs), status(_status) { store = sync_env->store; lock_name = "sync_lock"; @@ -1814,7 +1815,8 @@ public: RGWCoroutine *RGWRemoteBucketLog::init_sync_status_cr() { - return new RGWInitBucketShardSyncStatusCoroutine(&sync_env, bs); + rgw_bucket_shard_sync_info sync_status; + return new RGWInitBucketShardSyncStatusCoroutine(&sync_env, bs, sync_status); } template @@ -2747,8 +2749,7 @@ int RGWRunBucketSyncCoroutine::operate() yield { if ((rgw_bucket_shard_sync_info::SyncState)sync_status.state == rgw_bucket_shard_sync_info::StateInit) { - call(new RGWInitBucketShardSyncStatusCoroutine(sync_env, bs)); - sync_status.state = rgw_bucket_shard_sync_info::StateFullSync; + call(new RGWInitBucketShardSyncStatusCoroutine(sync_env, bs, sync_status)); } }