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<string, RGWZoneGroup>::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.
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<string, RGWZoneGroup>::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<string, RGWZone>::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<string, RGWZone>::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<string, RGWZone>::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();
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),
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) {}
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() {
}
/** 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();