From: lu.shasha Date: Tue, 27 Jun 2017 02:53:30 +0000 (+0800) Subject: rgw: fix radosgw-admin data sync run crash X-Git-Tag: v10.2.10~20^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c47e5abd0f6583bb6cf2a676e6b1194d29a96780;p=ceph.git rgw: fix radosgw-admin data sync run crash If sync thread have run before, then run data sync init. sync_status is still remain in rados pool. so no matter sync_status exists or not, if state is StateInit, sync_status.sync_info.num_shards should be updated. Fixes: http://tracker.ceph.com/issues/20423 Signed-off-by: Shasha Lu (cherry picked from commit c307910d7131fc290f00bb8e33876e667afb72ec) Conflicts: src/rgw/rgw_data_sync.cc (no data_sync_module or instance_id in jewel) --- diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index fb0ab49b866d..7e68df80a2d9 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -1385,9 +1385,7 @@ public: /* read sync status */ yield call(new RGWReadDataSyncStatusCoroutine(sync_env, &sync_status)); - if (retcode == -ENOENT) { - sync_status.sync_info.num_shards = num_shards; - } else if (retcode < 0 && retcode != -ENOENT) { + if (retcode < 0 && retcode != -ENOENT) { ldout(sync_env->cct, 0) << "ERROR: failed to fetch sync status, retcode=" << retcode << dendl; return set_cr_error(retcode); } @@ -1395,6 +1393,7 @@ public: /* state: init status */ if ((rgw_data_sync_info::SyncState)sync_status.sync_info.state == rgw_data_sync_info::StateInit) { ldout(sync_env->cct, 20) << __func__ << "(): init" << dendl; + sync_status.sync_info.num_shards = num_shards; yield call(new RGWInitDataSyncStatusCoroutine(sync_env, num_shards, &sync_status)); if (retcode < 0) { ldout(sync_env->cct, 0) << "ERROR: failed to init sync, retcode=" << retcode << dendl;