]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: SiteConfig::load() falls back to local zonegroup 55406/head
authorCasey Bodley <cbodley@redhat.com>
Wed, 31 Jan 2024 19:29:43 +0000 (14:29 -0500)
committerCasey Bodley <cbodley@redhat.com>
Sat, 3 Feb 2024 01:23:39 +0000 (20:23 -0500)
allow radosgw-admin commands like 'user create' to operate on a new zone
that hasn't been committed to the period yet. this follows similar logic
in RGWSI_Zone::do_start()

Fixes: https://tracker.ceph.com/issues/64255
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/driver/rados/rgw_zone.cc

index c8ebb79f542f0d62383a431978dbc6bb875c3c17..b93f319ac1760541426b074f5c7c83d7e220494a 100644 (file)
@@ -1222,12 +1222,15 @@ int SiteConfig::load(const DoutPrefixProvider* dpp, optional_yield y,
   if (realm && !force_local_zonegroup) {
     // try to load the realm's period
     r = load_period_zonegroup(dpp, y, cfgstore, *realm, zone_params.id);
-  } else {
-    // fall back to a local zonegroup
-    r = load_local_zonegroup(dpp, y, cfgstore, zone_params.id);
+    if (r != -ENOENT) {
+      return r;
+    }
+    ldpp_dout(dpp, 10) << "cannot find current period zonegroup, "
+        "using local zonegroup configuration" << dendl;
   }
 
-  return r;
+  // fall back to a local zonegroup
+  return load_local_zonegroup(dpp, y, cfgstore, zone_params.id);
 }
 
 std::unique_ptr<SiteConfig> SiteConfig::make_fake() {
@@ -1285,6 +1288,9 @@ int SiteConfig::load_local_zonegroup(const DoutPrefixProvider* dpp,
   if (!zonegroup_name.empty()) {
     r = cfgstore->read_zonegroup_by_name(dpp, y, zonegroup_name,
                                          *local_zonegroup, nullptr);
+  } else if (realm) {
+    r = cfgstore->read_default_zonegroup(dpp, y, realm->id,
+                                         *local_zonegroup, nullptr);
   } else {
     r = read_or_create_default_zonegroup(dpp, y, cfgstore, zone_params,
                                          *local_zonegroup);