From: umesh-mv Date: Tue, 18 Mar 2025 06:03:12 +0000 (+0000) Subject: rgw/rgw_zone : fixing default placement always getting added X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fheads%2Fwip-umeshmv-68775;p=ceph.git rgw/rgw_zone : fixing default placement always getting added added a check before adding default placement while creating zone and zonegroup Fixes: https://tracker.ceph.com/issues/68775 Signed-off-by: umesh-mv --- diff --git a/src/rgw/driver/rados/rgw_zone.cc b/src/rgw/driver/rados/rgw_zone.cc index 7d5fe3bcb21b9..d7d8c5111fb4d 100644 --- a/src/rgw/driver/rados/rgw_zone.cc +++ b/src/rgw/driver/rados/rgw_zone.cc @@ -831,16 +831,17 @@ int create_zonegroup(const DoutPrefixProvider* dpp, optional_yield y, if (info.id.empty()) { info.id = gen_random_uuid(); } + if (info.placement_targets.empty()) { + // insert the default placement target if it doesn't exist + constexpr std::string_view default_placement_name = "default-placement"; - // insert the default placement target if it doesn't exist - constexpr std::string_view default_placement_name = "default-placement"; + RGWZoneGroupPlacementTarget placement_target; + placement_target.name = default_placement_name; - RGWZoneGroupPlacementTarget placement_target; - placement_target.name = default_placement_name; - - info.placement_targets.emplace(default_placement_name, placement_target); - if (info.default_placement.name.empty()) { - info.default_placement.name = default_placement_name; + info.placement_targets.emplace(default_placement_name, placement_target); + if (info.default_placement.name.empty()) { + info.default_placement.name = default_placement_name; + } } int r = cfgstore->create_zonegroup(dpp, y, exclusive, info, nullptr); @@ -1020,13 +1021,15 @@ int create_zone(const DoutPrefixProvider* dpp, optional_yield y, info.id = gen_random_uuid(); } - // add default placement with empty pool name - RGWZonePlacementInfo placement; - rgw_pool pool; - placement.storage_classes.set_storage_class( - RGW_STORAGE_CLASS_STANDARD, &pool, nullptr); - // don't overwrite if it already exists - info.placement_pools.emplace("default-placement", std::move(placement)); + if (info.placement_pools.empty()) { + // add default placement with empty pool name + RGWZonePlacementInfo placement; + rgw_pool pool; + placement.storage_classes.set_storage_class( + RGW_STORAGE_CLASS_STANDARD, &pool, nullptr); + // don't overwrite if it already exists + info.placement_pools.emplace("default-placement", std::move(placement)); + } // build a set of all pool names used by other zones std::set pools;