]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: zone service tracks source zones in a vector
authorCasey Bodley <cbodley@redhat.com>
Thu, 28 Feb 2019 19:42:07 +0000 (14:42 -0500)
committerCasey Bodley <cbodley@redhat.com>
Thu, 2 May 2019 12:44:42 +0000 (08:44 -0400)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit dc8fdbf739aab34f962f7c5bec866e31e67c59c9)

src/rgw/rgw_rados.cc
src/rgw/services/svc_zone.cc
src/rgw/services/svc_zone.h

index 22eac4ad8bba3d15fd6455798334575d5595ed9f..28bab39e298e17578f382495fd31d759587b6801 100644 (file)
@@ -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<int, set<string> >& 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) {
index a13583763e55263ac999408d77c873e2693a34ef..724f83ae265ee60d479bc702e3e7d9b6f1a55072 100644 (file)
@@ -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;
index d2900fcc450c2abf3877cd7b95e08b0d175a1974..8c8dbebad43b3eda8314460c8d39337ff2971757 100644 (file)
@@ -36,7 +36,7 @@ class RGWSI_Zone : public RGWServiceInstance
 
   RGWRESTConn *rest_master_conn{nullptr};
   map<string, RGWRESTConn *> zone_conn_map;
-  map<string, RGWRESTConn *> zone_data_sync_from_map;
+  std::vector<const RGWZone*> data_sync_source_zones;
   map<string, RGWRESTConn *> zone_data_notify_to_map;
   map<string, RGWRESTConn *> zonegroup_conn_map;
 
@@ -89,8 +89,8 @@ public:
     return zone_conn_map;
   }
 
-  map<string, RGWRESTConn *>& get_zone_data_sync_from_map() {
-    return zone_data_sync_from_map;
+  std::vector<const RGWZone*>& get_data_sync_source_zones() {
+    return data_sync_source_zones;
   }
 
   map<string, RGWRESTConn *>& get_zone_data_notify_to_map() {