From: Casey Bodley Date: Thu, 28 Feb 2019 19:42:07 +0000 (-0500) Subject: rgw: zone service tracks source zones in a vector X-Git-Tag: v14.2.2~129^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9752b7cb03823fa6c0934a8ba63c5c587fef7c86;p=ceph.git rgw: zone service tracks source zones in a vector Signed-off-by: Casey Bodley (cherry picked from commit dc8fdbf739aab34f962f7c5bec866e31e67c59c9) --- diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 22eac4ad8bb..28bab39e298 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -832,9 +832,9 @@ class RGWDataSyncProcessorThread : public RGWSyncProcessorThread } public: RGWDataSyncProcessorThread(RGWRados *_store, RGWAsyncRadosProcessor *async_rados, - const string& _source_zone) + const RGWZone* source_zone) : RGWSyncProcessorThread(_store, "data-sync"), - sync(_store, async_rados, _source_zone), + sync(_store, async_rados, source_zone->id), initialized(false) {} void wakeup_sync_shards(map >& shard_ids) { @@ -1598,16 +1598,16 @@ int RGWRados::init_complete() data_log->set_observer(&*bucket_trim); Mutex::Locker dl(data_sync_thread_lock); - for (auto iter : svc.zone->get_zone_data_sync_from_map()) { - ldout(cct, 5) << "starting data sync thread for zone " << iter.first << dendl; - auto *thread = new RGWDataSyncProcessorThread(this, async_rados, iter.first); + for (auto source_zone : svc.zone->get_data_sync_source_zones()) { + ldout(cct, 5) << "starting data sync thread for zone " << source_zone->name << dendl; + auto *thread = new RGWDataSyncProcessorThread(this, async_rados, source_zone); ret = thread->init(); if (ret < 0) { ldout(cct, 0) << "ERROR: failed to initialize data sync thread" << dendl; return ret; } thread->start(); - data_sync_processor_threads[iter.first] = thread; + data_sync_processor_threads[source_zone->id] = thread; } auto interval = cct->_conf->rgw_sync_log_trim_interval; if (interval > 0) { diff --git a/src/rgw/services/svc_zone.cc b/src/rgw/services/svc_zone.cc index a13583763e5..724f83ae265 100644 --- a/src/rgw/services/svc_zone.cc +++ b/src/rgw/services/svc_zone.cc @@ -171,9 +171,9 @@ int RGWSI_Zone::do_start() ldout(cct, 0) << "WARNING: could not find zone config in zonegroup for local zone (" << zone_id() << "), will use defaults" << dendl; } *zone_public_config = zone_by_id[zone_id()]; - for (auto ziter : zonegroup->zones) { + for (const auto& ziter : zonegroup->zones) { const string& id = ziter.first; - RGWZone& z = ziter.second; + const RGWZone& z = ziter.second; if (id == zone_id()) { continue; } @@ -187,7 +187,7 @@ int RGWSI_Zone::do_start() if (zone_syncs_from(*zone_public_config, z) || zone_syncs_from(z, *zone_public_config)) { if (zone_syncs_from(*zone_public_config, z)) { - zone_data_sync_from_map[id] = conn; + data_sync_source_zones.push_back(&z); } if (zone_syncs_from(z, *zone_public_config)) { zone_data_notify_to_map[id] = conn; diff --git a/src/rgw/services/svc_zone.h b/src/rgw/services/svc_zone.h index d2900fcc450..8c8dbebad43 100644 --- a/src/rgw/services/svc_zone.h +++ b/src/rgw/services/svc_zone.h @@ -36,7 +36,7 @@ class RGWSI_Zone : public RGWServiceInstance RGWRESTConn *rest_master_conn{nullptr}; map zone_conn_map; - map zone_data_sync_from_map; + std::vector data_sync_source_zones; map zone_data_notify_to_map; map zonegroup_conn_map; @@ -89,8 +89,8 @@ public: return zone_conn_map; } - map& get_zone_data_sync_from_map() { - return zone_data_sync_from_map; + std::vector& get_data_sync_source_zones() { + return data_sync_source_zones; } map& get_zone_data_notify_to_map() {