From 9eeb71e28526df8ce2b920d4f50763a734264416 Mon Sep 17 00:00:00 2001 From: "J. Eric Ivancich" Date: Tue, 4 Nov 2025 16:55:38 -0500 Subject: [PATCH] rgw: fix `radosgw-admin object unlink ...` The unlink subcommand did not handle unsharded bucket indices appropriately. These are when the number of shards listed in the bucket instance object is 0. In that case there will actually be 1 shard. When number of shards as 0 is passed into the function that maps object names to shards, it returns -1. And that was not handled properly. That is now fixed. Signed-off-by: J. Eric Ivancich --- src/rgw/driver/rados/rgw_rados.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index b43113ccc58aa..7cd7b41e68aaa 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -11206,8 +11206,11 @@ int RGWRados::remove_objs_from_index(const DoutPrefixProvider *dpp, std::map> sharded_removals; for (const auto& entry_key : entry_key_list) { const rgw_obj_key obj_key(entry_key); - const uint32_t shard = - RGWSI_BucketIndex_RADOS::bucket_shard_index(obj_key, num_shards); + const uint32_t shard = [&obj_key, num_shards]() -> uint32_t { + int32_t temp = RGWSI_BucketIndex_RADOS::bucket_shard_index(obj_key, num_shards); + return (-1 == temp) ? 0 : (uint32_t) temp; + }(); + // entry_key already combines namespace and name, so we first have // to break that apart before we can then combine with instance -- 2.39.5