]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/rgw_zone : fixing default placement always getting added wip-umeshmv-68775
authorumesh-mv <umeshmuthuvara@gmail.com>
Tue, 18 Mar 2025 06:03:12 +0000 (06:03 +0000)
committerumesh-mv <umeshmuthuvara@gmail.com>
Wed, 19 Mar 2025 18:39:42 +0000 (18:39 +0000)
added a check before adding default placement while creating zone and zonegroup

Fixes: https://tracker.ceph.com/issues/68775
Signed-off-by: umesh-mv <umeshmuthuvara@gmail.com>
src/rgw/driver/rados/rgw_zone.cc

index 7d5fe3bcb21b96dbc9591f313bebd8e7a9e167cd..d7d8c5111fb4d9660ab28ab23fd0304be5e2c23d 100644 (file)
@@ -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<rgw_pool> pools;