From: Casey Bodley Date: Wed, 14 Dec 2022 20:41:35 +0000 (-0500) Subject: radosgw-admin: stop trying to 'resolve' zone arguments X-Git-Tag: v18.1.0~473^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=83f1afb7e15fecd720dfc7701294e937cbd1de52;p=ceph.git radosgw-admin: stop trying to 'resolve' zone arguments this was causing a 'zonegroup delete' command to delete the wrong zonegroup: $ radosgw-admin zonegroup delete --rgw-zonegroup rm_zonegroup WARNING: zonegroup name (--rgw-zonegroup) resolve mismatch. (param=remove_zg, resolved=a) Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 7506808d88207..7b35b58955f41 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -3280,141 +3280,6 @@ public: } }; -static int search_entities_by_zone(rgw::sal::ConfigStore* cfgstore, - rgw_zone_id zone_id, - RGWRealm *prealm, - RGWZoneGroup *pzonegroup) -{ - std::array realm_names; - rgw::sal::ListResult listing; - - do { - int r = cfgstore->list_realm_names(dpp(), null_yield, listing.next, - realm_names, listing); - if (r < 0) { - cerr << "failed to list realms: " << cpp_strerror(-r) << std::endl; - return r; - } - - for (const auto& realm_name : listing.entries) { - RGWRealm realm; - r = cfgstore->read_realm_by_name(dpp(), null_yield, realm_name, - realm, nullptr); - if (r < 0) { - cerr << "WARNING: failed to load realm " << realm_name - << ": " << cpp_strerror(r) << " ... skipping" << std::endl; - continue; - } - - RGWPeriod period; - r = cfgstore->read_period(dpp(), null_yield, realm.current_period, - std::nullopt, period); - if (r < 0) { - cerr << "WARNING: failed to load current period for realm " - << realm_name << ": " << cpp_strerror(r) << " ... skipping" << std::endl; - continue; - } - - for (auto& [zid, zonegroup] : period.period_map.zonegroups) { - if (zonegroup.zones.count(zone_id)) { - *prealm = std::move(realm); - *pzonegroup = std::move(zonegroup); - return 0; - } - } // foreach zonegroup in period - } // foreach realm_name in listing.entries - } while (!listing.next.empty()); - - return -ENOENT; -} - -static int try_to_resolve_local_zone(rgw::sal::ConfigStore* cfgstore, - string& zone_id, string& zone_name) -{ - /* try to read zone info */ - RGWZoneParams zone; - int r = rgw::read_zone(dpp(), null_yield, cfgstore, - zone_id, zone_name, zone); - if (r == -ENOENT) { - ldpp_dout(dpp(), 20) << __func__ << "(): local zone not found (id=" << zone_id << ", name= " << zone_name << ")" << dendl; - return r; - } - - if (r < 0) { - ldpp_dout(dpp(), 0) << __func__ << "(): unable to read zone (id=" << zone_id << ", name= " << zone_name << "): " << cpp_strerror(-r) << dendl; - - return r; - } - - zone_id = zone.get_id(); - zone_name = zone.get_name(); - - return 0; -} - -static void check_set_consistent(const string& resolved_param, - string& param, - const string& param_name) -{ - if (!param.empty() && param != resolved_param) { - ldpp_dout(dpp(), 5) << "WARNING: " << param_name << " resolve mismatch. (param=" << param << ", resolved=" << resolved_param << ")" << dendl; - return; - } - - param = resolved_param; - ldpp_dout(dpp(), 20) << __func__ << "(): resolved param: " << param_name << ": " << param << dendl; -} - - -static int try_to_resolve_local_entities(rgw::sal::ConfigStore* cfgstore, - string& realm_id, string& realm_name, - string& zonegroup_id, string& zonegroup_name, - string& zone_id, string& zone_name) -{ - /* - * Try to figure out realm, zonegroup, and zone entities, based on provided params and local zone. - * - * First read the local zone info (for zone id/name). Then search existing realm and period - * configuration and if found, update (but don't override) passed params. - * - */ - - ldpp_dout(dpp(), 20) << __func__ << "(): before: realm_id=" << realm_id << " realm_name=" << realm_name << " zonegroup_id=" << zonegroup_id << " zonegroup_name=" << zonegroup_name << " zone_id=" << zone_id << " zone_name=" << zone_name << dendl; - int r = try_to_resolve_local_zone(cfgstore, zone_id, zone_name); - if (r == -ENOENT) { - /* this local zone doesn't exist, abort */ - return 0; - } - if (r < 0) { - return r; - } - - if (zone_id.empty()) { - /* not sure it's possible, but let's abort */ - return 0; - } - - RGWRealm realm; - RGWZoneGroup zonegroup; - r = search_entities_by_zone(cfgstore, zone_id, &realm, &zonegroup); - if (r == -ENOENT) { - return 0; // not found - } - if (r < 0) { - ldpp_dout(dpp(), 0) << "ERROR: error when searching for realm id (r=" << r << "), ignoring" << dendl; - return r; - } - - check_set_consistent(realm.get_id(), realm_id, "realm id (--realm-id)"); - check_set_consistent(realm.get_name(), realm_name, "realm name (--rgw-realm)"); - check_set_consistent(zonegroup.get_id(), zonegroup_id, "zonegroup id (--zonegroup-id)"); - check_set_consistent(zonegroup.get_name(), zonegroup_name, "zonegroup name (--rgw-zonegroup)"); - - ldpp_dout(dpp(), 20) << __func__ << "(): after: realm_id=" << realm_id << " realm_name=" << realm_name << " zonegroup_id=" << zonegroup_id << " zonegroup_name=" << zonegroup_name << " zone_id=" << zone_id << " zone_name=" << zone_name << dendl; - - return 0; -} - void init_realm_param(CephContext *cct, string& var, std::optional& opt_var, const string& conf_name) { var = cct->_conf.get_val(conf_name); @@ -4501,11 +4366,6 @@ int main(int argc, const char **argv) StoreDestructor store_destructor(driver); if (raw_storage_op) { - try_to_resolve_local_entities(cfgstore.get(), realm_id, realm_name, - zonegroup_id, zonegroup_name, - zone_id, zone_name); - - switch (opt_cmd) { case OPT::PERIOD_DELETE: {