From: J. Eric Ivancich Date: Thu, 11 Nov 2021 22:20:24 +0000 (-0500) Subject: rgw: fix `bi put` not using right bucket index shard X-Git-Tag: v17.1.0~432^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F43908%2Fhead;p=ceph.git rgw: fix `bi put` not using right bucket index shard When `radosgw-admin bi put` adds an entry for an incomplete multipart upload, the bucket index shard is not calculated correctly. It should be based on the name of the ultimate object. However the calculation was including the added organizational suffixes as well. This corrects that. NOTE: When entries are not put in the correct index shard, unordered listing becomes unreliable, perhaps causing entries to be skipped or infinite loops to form. Signed-off-by: J. Eric Ivancich --- diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index bfab1e0f1de7..703e26024fdc 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -8222,7 +8222,14 @@ int RGWRados::bi_put(BucketShard& bs, rgw_cls_bi_entry& entry) int RGWRados::bi_put(const DoutPrefixProvider *dpp, rgw_bucket& bucket, rgw_obj& obj, rgw_cls_bi_entry& entry) { + // make sure incomplete multipart uploads are hashed correctly + if (obj.key.ns == RGW_OBJ_NS_MULTIPART) { + RGWMPObj mp; + mp.from_meta(obj.key.name); + obj.index_hash_source = mp.get_key(); + } BucketShard bs(this); + int ret = bs.init(bucket, obj, nullptr /* no RGWBucketInfo */, dpp); if (ret < 0) { ldpp_dout(dpp, 5) << "bs.init() returned ret=" << ret << dendl;