From d1d9386002df3a475ebdae8513150c57fb3ccd3c Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Fri, 4 Dec 2015 11:50:57 -0800 Subject: [PATCH] rgw: rearrange zonegroup and zone initialization move into helpers, don't keep distinct structures for zonegroup local and period zonegroup, we end up using the one we configured anyway. Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_rados.cc | 177 ++++++++++++++++++++++++------------------- src/rgw/rgw_rados.h | 21 +---- 2 files changed, 105 insertions(+), 93 deletions(-) diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index d7fde58cfdd15..30aa7c139afa9 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -3315,6 +3315,83 @@ int RGWRados::replace_region_with_zonegroup() return 0; } +int RGWRados::init_zg_from_period(bool *initialized) +{ + *initialized = false; + + if (current_period.get_id().empty()) { + return 0; + } + + int ret = zonegroup.init(cct, this); + ldout(cct, 20) << "period zonegroup init ret " << ret << dendl; + if (ret == -ENOENT) { + return 0; + } + if (ret < 0) { + lderr(cct) << "failed reading zonegroup info: " << " " << cpp_strerror(-ret) << dendl; + return ret; + } + ldout(cct, 20) << "period zonegroup name " << zonegroup.get_name() << dendl; + + map::const_iterator iter = + current_period.get_map().zonegroups.find(zonegroup.get_id()); + + if (iter != current_period.get_map().zonegroups.end()) { + ldout(cct, 20) << "using current period zonegroup " << zonegroup.get_name() << dendl; + zonegroup = iter->second; + ret = zone_params.init(cct, this); + if (ret < 0 && ret != -ENOENT) { + lderr(cct) << "failed reading zone params info: " << " " << cpp_strerror(-ret) << dendl; + return ret; + } + } + for (iter = current_period.get_map().zonegroups.begin(); + iter != current_period.get_map().zonegroups.end(); ++iter){ + const RGWZoneGroup& zg = iter->second; + add_new_connection_to_map(zonegroup_conn_map, zg, new RGWRESTConn(cct, this, zonegroup.get_id(), zonegroup.endpoints)); + if (!current_period.get_master_zonegroup().empty() && + zg.get_id() == current_period.get_master_zonegroup()) { + rest_master_conn = new RGWRESTConn(cct, this, zg.get_id(), zg.endpoints); + break; + } + } + + *initialized = true; + + return 0; +} + +int RGWRados::init_zg_from_local(bool *creating_defaults) +{ + int ret = zonegroup.init(cct, this); + if ( (ret < 0 && ret != -ENOENT) || (ret == -ENOENT && !cct->_conf->rgw_zonegroup.empty())) { + lderr(cct) << "failed reading zonegroup info: ret "<< ret << " " << cpp_strerror(-ret) << dendl; + return ret; + } else if (ret == -ENOENT) { + *creating_defaults = true; + lderr(cct) << "Creating default zonegroup " << dendl; + ret = zonegroup.create_default(); + if (ret < 0) { + lderr(cct) << "failure in zonegroup create_default: ret "<< ret << " " << cpp_strerror(-ret) + << dendl; + return ret; + } + ret = zonegroup.init(cct, this); + if (ret < 0) { + lderr(cct) << "failure in zonegroup create_default: ret "<< ret << " " << cpp_strerror(-ret) + << dendl; + return ret; + } + } + ldout(cct, 20) << "zonegroup " << zonegroup.get_name() << dendl; + if (zonegroup.is_master) { + rest_master_conn = new RGWRESTConn(cct, this, zonegroup.get_id(), zonegroup.endpoints); + } + + return 0; +} + /** * Initialize the RADOS instance and prepare to do other ops * Returns 0 on success, -ERR# on failure. @@ -3347,93 +3424,41 @@ int RGWRados::init_complete() return ret; } + bool zg_initialized = false; + if (!current_period.get_id().empty()) { - ret = period_zonegroup.init(cct, this); - ldout(cct, 20) << "period zonegroup init ret " << ret << dendl; - if (ret < 0 && ret != -ENOENT) { - lderr(cct) << "failed reading zonegroup info: " << " " << cpp_strerror(-ret) << dendl; + ret = init_zg_from_period(&zg_initialized); + if (ret < 0) { return ret; - } else if (ret != -ENOENT) { - ldout(cct, 20) << "period zonegroup name " << period_zonegroup.get_name() << dendl; - map::const_iterator iter = - current_period.get_map().zonegroups.find(period_zonegroup.get_id()); - if (iter != current_period.get_map().zonegroups.end()) { - ldout(cct, 20) << "using current period zonegroup " << period_zonegroup.get_name() << dendl; - period_zonegroup = iter->second; - has_period_zonegroup = true; - ret = zone_params.init(cct, this); - if (ret < 0 && ret != -ENOENT) { - lderr(cct) << "failed reading zone params info: " << " " << cpp_strerror(-ret) << dendl; - return ret; - } else if (ret != -ENOENT) { - map::iterator zone_iter = - period_zonegroup.zones.find(zone_params.get_id()); - if (zone_iter != period_zonegroup.zones.end()) { - period_zone = zone_iter->second; - ldout(cct, 20) << "using current period zone " << period_zone.name << dendl; - has_period_zone = true; - } - } - } - for (iter = current_period.get_map().zonegroups.begin(); - iter != current_period.get_map().zonegroups.end(); ++iter){ - const RGWZoneGroup& zg = iter->second; - add_new_connection_to_map(zonegroup_conn_map, zg, new RGWRESTConn(cct, this, zonegroup.get_id(), zonegroup.endpoints)); - if (!current_period.get_master_zonegroup().empty() && - zg.get_id() == current_period.get_master_zonegroup()) { - rest_master_conn = new RGWRESTConn(cct, this, zg.get_id(), zg.endpoints); - } - } } } bool creating_defaults = false; - if (!has_period_zonegroup) { + if (!zg_initialized) { ldout(cct, 10) << " cannot find current period zonegroup using local zonegroup" << dendl; - ret = zonegroup.init(cct, this); - if ( (ret < 0 && ret != -ENOENT) || (ret == -ENOENT && !cct->_conf->rgw_zonegroup.empty())) { - lderr(cct) << "failed reading zonegroup info: ret "<< ret << " " << cpp_strerror(-ret) << dendl; + ret = init_zg_from_local(&creating_defaults); + if (ret < 0) { return ret; - } else if (ret == -ENOENT) { - creating_defaults = true; - lderr(cct) << "Creating default zonegroup " << dendl; - ret = zonegroup.create_default(); - if (ret < 0) { - lderr(cct) << "failure in zonegroup create_default: ret "<< ret << " " << cpp_strerror(-ret) - << dendl; - return ret; - } - ret = zonegroup.init(cct, this); - if (ret < 0) { - lderr(cct) << "failure in zonegroup create_default: ret "<< ret << " " << cpp_strerror(-ret) - << dendl; - return ret; - } - } - ldout(cct, 20) << "zonegroup " << zonegroup.get_name() << dendl; - if (zonegroup.is_master) { - rest_master_conn = new RGWRESTConn(cct, this, zonegroup.get_id(), zonegroup.endpoints); } } - if (!has_period_zone) { - ldout(cct, 10) << "Cannot find current period zone using local zone" << dendl; - if (creating_defaults && cct->_conf->rgw_zone.empty()) { - zone_params.set_name(default_zone_name); - } - ret = zone_params.init(cct, this); - if (ret < 0 && ret != -ENOENT) { - lderr(cct) << "failed reading zone info: ret "<< ret << " " << cpp_strerror(-ret) << dendl; - return ret; - } - map::iterator zone_iter = get_zonegroup().zones.find(zone_params.get_id()); - if (zone_iter != get_zonegroup().zones.end()) { - zone_public_config = zone_iter->second; - ldout(cct, 20) << "zone " << zone_params.get_name() << dendl; - } else { - lderr(cct) << "Cannot find zone id=" << zone_params.get_id() << " (name=" << zone_params.get_name() << ")" << dendl; - return -EINVAL; - } + ldout(cct, 10) << "Cannot find current period zone using local zone" << dendl; + if (creating_defaults && cct->_conf->rgw_zone.empty()) { + zone_params.set_name(default_zone_name); + } + + ret = zone_params.init(cct, this); + if (ret < 0 && ret != -ENOENT) { + lderr(cct) << "failed reading zone info: ret "<< ret << " " << cpp_strerror(-ret) << dendl; + return ret; + } + map::iterator zone_iter = get_zonegroup().zones.find(zone_params.get_id()); + if (zone_iter != get_zonegroup().zones.end()) { + zone_public_config = zone_iter->second; + ldout(cct, 20) << "zone " << zone_params.get_name() << dendl; + } else { + lderr(cct) << "Cannot find zone id=" << zone_params.get_id() << " (name=" << zone_params.get_name() << ")" << dendl; + return -EINVAL; } init_unique_trans_id_deps(); diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index 7f9873c67c330..9b30f7fe504a7 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -1784,11 +1784,6 @@ protected: RGWZone zone_public_config; /* external zone params, e.g., entrypoints, log flags, etc. */ RGWZoneParams zone_params; /* internal zone params, e.g., rados pools */ - RGWZoneGroup period_zonegroup; - RGWZone period_zone; /* external zone params, e.g., entrypoints, log flags, etc. */ - bool has_period_zonegroup; - bool has_period_zone; - RGWPeriod current_period; public: RGWRados() : max_req_id(0), lock("rados_timer_lock"), watchers_lock("watchers_lock"), timer(NULL), @@ -1807,8 +1802,6 @@ public: quota_handler(NULL), finisher(NULL), cr_registry(NULL), - has_period_zonegroup(false), - has_period_zone(false), rest_master_conn(NULL), meta_mgr(NULL), data_log(NULL) {} @@ -1883,18 +1876,10 @@ public: RGWZoneParams& get_zone_params() { return zone_params; } RGWZoneGroup& get_zonegroup() { - if (has_period_zonegroup) { - return period_zonegroup; - } else { - return zonegroup; - } + return zonegroup; } RGWZone& get_zone() { - if (has_period_zone) { - return period_zone; - } else { - return zone_public_config; - } + return zone_public_config; } const RGWQuotaInfo& get_bucket_quota() { @@ -1948,6 +1933,8 @@ public: } /** Initialize the RADOS instance and prepare to do other ops */ virtual int init_rados(); + int init_zg_from_period(bool *initialized); + int init_zg_from_local(bool *creating_defaults); int init_complete(); int replace_region_with_zonegroup(); int convert_regionmap(); -- 2.39.5