From 902cc0a71e91faf6d6e3685c036d346251e4f77f Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Fri, 23 Aug 2024 15:03:31 -0400 Subject: [PATCH] rgw: ignore zoneless default realm when not configured "default" zone/zonegroup deployments without a realm can be broken by the creation of an unrelated realm, because that realm is (was) automatically set as the default when startup detects an incomplete default realm (one that doesn't have a default zone), fall back to the realmless "default" zone/zonegroup instead Fixes: https://tracker.ceph.com/issues/67697 Signed-off-by: Casey Bodley --- src/rgw/driver/rados/rgw_zone.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/rgw/driver/rados/rgw_zone.cc b/src/rgw/driver/rados/rgw_zone.cc index ae7a4d48e5e6b..f9de570aa5445 100644 --- a/src/rgw/driver/rados/rgw_zone.cc +++ b/src/rgw/driver/rados/rgw_zone.cc @@ -1199,6 +1199,18 @@ int SiteConfig::load(const DoutPrefixProvider* dpp, optional_yield y, } else if (realm) { // load the realm's default zone r = cfgstore->read_default_zone(dpp, y, realm->id, zone_params, nullptr); + if (r == -ENOENT) { + if (realm_name.empty()) { + // rgw_realm was not specified, and we found a default realm that + // doesn't have a default zone. ignore the realm and try to load the + // global default zone + realm = std::nullopt; + r = read_or_create_default_zone(dpp, y, cfgstore, zone_params); + } else { + ldpp_dout(dpp, 0) << "No rgw_zone configured, and the selected realm \"" + << realm->name << "\" does not have a default zone." << dendl; + } + } } else { // load or create the "default" zone r = read_or_create_default_zone(dpp, y, cfgstore, zone_params); -- 2.39.5