]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: bucket sync: don't use optional for some members
authorYehuda Sadeh <yehuda@redhat.com>
Thu, 23 Jan 2020 00:41:34 +0000 (16:41 -0800)
committerYehuda Sadeh <yehuda@redhat.com>
Tue, 28 Jan 2020 18:20:40 +0000 (10:20 -0800)
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_bucket_sync.cc
src/rgw/rgw_json_enc.cc
src/rgw/rgw_sync_policy.cc
src/rgw/rgw_sync_policy.h

index 3474142322b60d2875c040561f41c6fb4aab58d6..a1f9787c7eed38b7ae5863cf7f0e7dd74539fc84 100644 (file)
@@ -185,30 +185,26 @@ void rgw_sync_group_pipe_map::init(CephContext *cct,
   pall_zones->insert(zone);
 
   /* symmetrical */
-  if (flow.symmetrical) {
-    for (auto& symmetrical_group : *flow.symmetrical) {
-      if (symmetrical_group.zones.find(zone) != symmetrical_group.zones.end()) {
-        for (auto& z : symmetrical_group.zones) {
-          if (z != zone) {
-            pall_zones->insert(z);
-            try_add_source(z, zone, zone_pipes, filter_cb);
-            try_add_dest(zone, z, zone_pipes, filter_cb);
-          }
+  for (auto& symmetrical_group : flow.symmetrical) {
+    if (symmetrical_group.zones.find(zone) != symmetrical_group.zones.end()) {
+      for (auto& z : symmetrical_group.zones) {
+        if (z != zone) {
+          pall_zones->insert(z);
+          try_add_source(z, zone, zone_pipes, filter_cb);
+          try_add_dest(zone, z, zone_pipes, filter_cb);
         }
       }
     }
   }
 
   /* directional */
-  if (flow.directional) {
-    for (auto& rule : *flow.directional) {
-      if (rule.source_zone == zone) {
-        pall_zones->insert(rule.dest_zone);
-        try_add_dest(zone, rule.dest_zone, zone_pipes, filter_cb);
-      } else if (rule.dest_zone == zone) {
-        pall_zones->insert(rule.source_zone);
-        try_add_source(rule.source_zone, zone, zone_pipes, filter_cb);
-      }
+  for (auto& rule : flow.directional) {
+    if (rule.source_zone == zone) {
+      pall_zones->insert(rule.dest_zone);
+      try_add_dest(zone, rule.dest_zone, zone_pipes, filter_cb);
+    } else if (rule.dest_zone == zone) {
+      pall_zones->insert(rule.source_zone);
+      try_add_source(rule.source_zone, zone, zone_pipes, filter_cb);
     }
   }
 }
index f0aa4b71de5d545146d21e202103e4fddc0d470d..f525c39893e995b96424f01a7dc9647eca406d56 100644 (file)
@@ -1054,8 +1054,13 @@ void rgw_sync_bucket_pipes::decode_json(JSONObj *obj)
 
 void rgw_sync_data_flow_group::dump(Formatter *f) const
 {
-  encode_json("symmetrical", symmetrical, f);
-  encode_json("directional", directional, f);
+  if (!symmetrical.empty()) {
+    encode_json("symmetrical", symmetrical, f);
+  }
+
+  if (!directional.empty()) {
+    encode_json("directional", directional, f);
+  }
 }
 
 void rgw_sync_data_flow_group::decode_json(JSONObj *obj)
index 4bd7fbdadabd8481d51758af311c805332e42287..2ed5fbbe91326f829fbf2223ced88ed918fe85cc 100644 (file)
@@ -353,14 +353,13 @@ void rgw_sync_bucket_pipes::get_potential_related_buckets(const rgw_bucket& buck
 
 bool rgw_sync_data_flow_group::find_symmetrical(const string& flow_id, bool create, rgw_sync_symmetric_group **flow_group)
 {
-  if (!symmetrical) {
+  if (symmetrical.empty()) {
     if (!create) {
       return false;
     }
-    symmetrical.emplace();
   }
 
-  for (auto& group : *symmetrical) {
+  for (auto& group : symmetrical) {
     if (flow_id == group.id) {
       *flow_group = &group;
       return true;
@@ -371,7 +370,7 @@ bool rgw_sync_data_flow_group::find_symmetrical(const string& flow_id, bool crea
     return false;
   }
 
-  auto& group = symmetrical->emplace_back();
+  auto& group = symmetrical.emplace_back();
   *flow_group = &group;
   (*flow_group)->id = flow_id;
   return true;
@@ -379,11 +378,11 @@ bool rgw_sync_data_flow_group::find_symmetrical(const string& flow_id, bool crea
 
 void rgw_sync_data_flow_group::remove_symmetrical(const string& flow_id, std::optional<std::vector<rgw_zone_id> > zones)
 {
-  if (!symmetrical) {
+  if (symmetrical.empty()) {
     return;
   }
 
-  auto& groups = *symmetrical;
+  auto& groups = symmetrical;
 
   auto iter = groups.begin();
 
@@ -392,7 +391,7 @@ void rgw_sync_data_flow_group::remove_symmetrical(const string& flow_id, std::op
       if (!zones) {
         groups.erase(iter);
         if (groups.empty()) {
-          symmetrical.reset();
+          symmetrical.clear();
         }
         return;
       }
@@ -414,20 +413,19 @@ void rgw_sync_data_flow_group::remove_symmetrical(const string& flow_id, std::op
     groups.erase(iter);
   }
   if (groups.empty()) {
-    symmetrical.reset();
+    symmetrical.clear();
   }
 }
 
 bool rgw_sync_data_flow_group::find_directional(const rgw_zone_id& source_zone, const rgw_zone_id& dest_zone, bool create, rgw_sync_directional_rule **flow_group)
 {
-  if (!directional) {
+  if (directional.empty()) {
     if (!create) {
       return false;
     }
-    directional.emplace();
   }
 
-  for (auto& rule : *directional) {
+  for (auto& rule : directional) {
     if (source_zone == rule.source_zone &&
         dest_zone == rule.dest_zone) {
       *flow_group = &rule;
@@ -439,7 +437,7 @@ bool rgw_sync_data_flow_group::find_directional(const rgw_zone_id& source_zone,
     return false;
   }
 
-  auto& rule = directional->emplace_back();
+  auto& rule = directional.emplace_back();
   *flow_group = &rule;
 
   rule.source_zone = source_zone;
@@ -450,18 +448,15 @@ bool rgw_sync_data_flow_group::find_directional(const rgw_zone_id& source_zone,
 
 void rgw_sync_data_flow_group::remove_directional(const rgw_zone_id& source_zone, const rgw_zone_id& dest_zone)
 {
-  if (!directional) {
+  if (directional.empty()) {
     return;
   }
 
-  for (auto iter = directional->begin(); iter != directional->end(); ++iter) {
+  for (auto iter = directional.begin(); iter != directional.end(); ++iter) {
     auto& rule = *iter;
     if (source_zone == rule.source_zone &&
         dest_zone == rule.dest_zone) {
-      directional->erase(iter);
-      if (directional->empty()) {
-        directional.reset();
-      }
+      directional.erase(iter);
       return;
     }
   }
@@ -469,8 +464,8 @@ void rgw_sync_data_flow_group::remove_directional(const rgw_zone_id& source_zone
 
 void rgw_sync_data_flow_group::init_default(const std::set<rgw_zone_id>& zones)
 {
-  symmetrical.emplace();
-  symmetrical->push_back(rgw_sync_symmetric_group("default", zones));
+  symmetrical.clear();
+  symmetrical.push_back(rgw_sync_symmetric_group("default", zones));
 }
 
 bool rgw_sync_policy_group::find_pipe(const string& pipe_id, bool create, rgw_sync_bucket_pipes **pipe)
index e03b884af3053fbb41a630d9f6bbd004310c4401..3aa28da400ccbd3bf0f9e327fb1e654de043da21 100644 (file)
@@ -553,8 +553,8 @@ std::ostream& operator<<(std::ostream& os, const rgw_sync_bucket_pipes& pipe);
  * Directional: one zone fetches data from another.
  */
 struct rgw_sync_data_flow_group {
-  std::optional<std::vector<rgw_sync_symmetric_group> > symmetrical;
-  std::optional<std::vector<rgw_sync_directional_rule> > directional;
+  std::vector<rgw_sync_symmetric_group> symmetrical;
+  std::vector<rgw_sync_directional_rule> directional;
 
   void encode(bufferlist& bl) const {
     ENCODE_START(1, 1, bl);
@@ -574,8 +574,7 @@ struct rgw_sync_data_flow_group {
   void decode_json(JSONObj *obj);
 
   bool empty() const {
-    return ((!symmetrical || symmetrical->empty()) &&
-            (!directional || directional->empty()));
+    return (symmetrical.empty() && directional.empty());
   }
 
   bool find_symmetrical(const string& flow_id, bool create, rgw_sync_symmetric_group **flow_group);