int RGWDataSyncStatusManager::init()
{
- map<string, RGWRESTConn *>::iterator iter = store->zone_conn_map.find(source_zone);
- if (iter == store->zone_conn_map.end()) {
- lderr(store->ctx()) << "no REST connection to master zone" << dendl;
- return -EIO;
+ conn = store->get_zone_conn_by_name(source_zone);
+ if (!conn) {
+ ldout(store->ctx(), 0) << "connection object to zone " << source_zone << " does not exist" << dendl;
+ return -EINVAL;
}
- conn = iter->second;
-
const char *log_pool = store->get_zone_params().log_pool.name.c_str();
librados::Rados *rados = store->get_rados_handle();
int r = rados->ioctx_create(log_pool, ioctx);
int RGWBucketSyncStatusManager::init()
{
- map<string, RGWRESTConn *>::iterator iter = store->zone_conn_map.find(source_zone);
- if (iter == store->zone_conn_map.end()) {
- lderr(store->ctx()) << "no REST connection to master zone" << dendl;
- return -EIO;
+ conn = store->get_zone_conn_by_name(source_zone);
+ if (!conn) {
+ ldout(store->ctx(), 0) << "connection object to zone " << source_zone << " does not exist" << dendl;
+ return -EINVAL;
}
- conn = iter->second;
-
async_rados = new RGWAsyncRadosProcessor(store, store->ctx()->_conf->rgw_num_async_rados_threads);
async_rados->start();
for (ziter = get_zonegroup().zones.begin(); ziter != get_zonegroup().zones.end(); ++ziter) {
const string& id = ziter->first;
RGWZone& z = ziter->second;
+ zone_id_by_name[z.name] = id;
if (id != zone_id()) {
if (!z.endpoints.empty()) {
ldout(cct, 20) << "generating connection object for zone " << z.name << " id " << z.id << dendl;
- zone_conn_map[id] = new RGWRESTConn(cct, this, z.endpoints);
+ RGWRESTConn *conn = new RGWRESTConn(cct, this, z.endpoints);
+ zone_conn_map[id] = conn;
} else {
ldout(cct, 0) << "WARNING: can't generate connection for zone " << z.id << " id " << z.name << ": no endpoints defined" << dendl;
}
map<string, RGWRESTConn *> zone_conn_map;
map<string, RGWRESTConn *> zonegroup_conn_map;
+ map<string, string> zone_id_by_name;
+
+ RGWRESTConn *get_zone_conn_by_id(const string& id) {
+ auto citer = zone_conn_map.find(id);
+ if (citer == zone_conn_map.end()) {
+ return NULL;
+ }
+
+ return citer->second;
+ }
+
+ RGWRESTConn *get_zone_conn_by_name(const string& name) {
+ auto i = zone_id_by_name.find(name);
+ if (i == zone_id_by_name.end()) {
+ return NULL;
+ }
+
+ return get_zone_conn_by_id(i->second);
+ }
+
int get_zonegroup(const string& id, RGWZoneGroup& zonegroup) {
int ret = 0;
if (id == get_zonegroup().get_id()) {