From d4791895b2ecc631a382dc06ee54a0041f03d534 Mon Sep 17 00:00:00 2001 From: umesh-mv Date: Tue, 18 Mar 2025 06:03:12 +0000 Subject: [PATCH] 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 --- src/rgw/driver/rados/rgw_zone.cc | 33 +++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) 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; -- 2.39.5