From: Tianshan Qu Date: Wed, 20 Jun 2018 02:02:47 +0000 (+0800) Subject: rgw: fix index complete miss zones_trace set X-Git-Tag: v12.2.8~79^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9aa1e0b3c47a2b703d1158fcef1a09c64a2d9909;p=ceph.git rgw: fix index complete miss zones_trace set index complete default with nullptr of zones_trace, and we should init one, otherwise will cause data sync redundant. fixes: http://tracker.ceph.com/issues/24590 Signed-off-by: Tianshan Qu (cherry picked from commit 54d39917fa4bc8eefb846a2eb08698619596f59f) --- diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 100f77a699b..e968e798a83 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -11072,9 +11072,8 @@ int RGWRados::bucket_index_link_olh(const RGWBucketInfo& bucket_info, RGWObjStat rgw_zone_set zones_trace; if (_zones_trace) { zones_trace = *_zones_trace; - } else { - zones_trace.insert(get_zone().id); } + zones_trace.insert(get_zone().id); BucketShard bs(this); @@ -12856,10 +12855,8 @@ int RGWRados::cls_obj_prepare_op(BucketShard& bs, RGWModifyOp op, string& tag, if (_zones_trace) { zones_trace = *_zones_trace; } - else { - zones_trace.insert(get_zone().id); - } - + zones_trace.insert(get_zone().id); + ObjectWriteOperation o; cls_rgw_obj_key key(obj.key.get_index_key_name(), obj.key.instance); cls_rgw_guard_bucket_resharding(o, -ERR_BUSY_RESHARDING); @@ -12877,16 +12874,22 @@ int RGWRados::cls_obj_complete_op(BucketShard& bs, const rgw_obj& obj, RGWModify dir_meta = ent.meta; dir_meta.category = category; + rgw_zone_set zones_trace; + if (_zones_trace) { + zones_trace = *_zones_trace; + } + zones_trace.insert(get_zone().id); + rgw_bucket_entry_ver ver; ver.pool = pool; ver.epoch = epoch; cls_rgw_obj_key key(ent.key.name, ent.key.instance); cls_rgw_guard_bucket_resharding(o, -ERR_BUSY_RESHARDING); cls_rgw_bucket_complete_op(o, op, tag, ver, key, dir_meta, remove_objs, - get_zone().log_data, bilog_flags, _zones_trace); + get_zone().log_data, bilog_flags, &zones_trace); complete_op_data *arg; index_completion_manager->create_completion(obj, op, tag, ver, key, dir_meta, remove_objs, - get_zone().log_data, bilog_flags, _zones_trace, &arg); + get_zone().log_data, bilog_flags, &zones_trace, &arg); librados::AioCompletion *completion = arg->rados_completion; int ret = bs.index_ctx.aio_operate(bs.bucket_obj, arg->rados_completion, &o); completion->release(); /* can't reference arg here, as it might have already been released */