From: Casey Bodley Date: Wed, 31 Jan 2024 19:29:43 +0000 (-0500) Subject: rgw: SiteConfig::load() falls back to local zonegroup X-Git-Tag: v19.1.0~363^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=1183db4146defaaa8371d65e2e65c99b21e106e9;p=ceph.git rgw: SiteConfig::load() falls back to local zonegroup 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 --- diff --git a/src/rgw/driver/rados/rgw_zone.cc b/src/rgw/driver/rados/rgw_zone.cc index c8ebb79f542f0..b93f319ac1760 100644 --- a/src/rgw/driver/rados/rgw_zone.cc +++ b/src/rgw/driver/rados/rgw_zone.cc @@ -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::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);