From: taodd Date: Mon, 13 Jan 2020 14:18:45 +0000 (+0800) Subject: rgw: update the hash source for multipart entries during resharding X-Git-Tag: v13.2.9~83^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F33312%2Fhead;p=ceph.git rgw: update the hash source for multipart entries during resharding Fixes: https://tracker.ceph.com/issues/43583 Signed-off-by: dongdong tao (cherry picked from commit fb6f78a3a54a39fb2f43fa7846cb847e4917860d) Conflicts: src/rgw/rgw_reshard.cc - mimic does not have 7e613fdc55bd3db200cce912b0e27a99a128aa27 - in mimic, RGWMPObj is defined in rgw_rados.h --- diff --git a/src/rgw/rgw_reshard.cc b/src/rgw/rgw_reshard.cc index c01e391bf855..2813fd595121 100644 --- a/src/rgw/rgw_reshard.cc +++ b/src/rgw/rgw_reshard.cc @@ -558,6 +558,11 @@ int RGWBucketReshard::do_reshard(int num_shards, bool account = entry.get_info(&cls_key, &category, &stats); rgw_obj_key key(cls_key); rgw_obj obj(new_bucket_info.bucket, key); + RGWMPObj mp; + if (key.ns == RGW_OBJ_NS_MULTIPART && mp.from_meta(key.name)) { + // place the multipart .meta object on the same shard as its head object + obj.index_hash_source = mp.get_key(); + } int ret = store->get_target_shard_id(new_bucket_info, obj.get_hash_object(), &target_shard_id); if (ret < 0) { lderr(store->ctx()) << "ERROR: get_target_shard_id() returned ret=" << ret << dendl;