From 98dd9943566b1a61cf3894ccc09c2c771bbafe9b Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 22 Jan 2020 16:41:34 -0800 Subject: [PATCH] rgw: bucket sync: don't use optional for some members Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_bucket_sync.cc | 32 ++++++++++++++------------------ src/rgw/rgw_json_enc.cc | 9 +++++++-- src/rgw/rgw_sync_policy.cc | 35 +++++++++++++++-------------------- src/rgw/rgw_sync_policy.h | 7 +++---- 4 files changed, 39 insertions(+), 44 deletions(-) diff --git a/src/rgw/rgw_bucket_sync.cc b/src/rgw/rgw_bucket_sync.cc index 3474142322b..a1f9787c7ee 100644 --- a/src/rgw/rgw_bucket_sync.cc +++ b/src/rgw/rgw_bucket_sync.cc @@ -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); } } } diff --git a/src/rgw/rgw_json_enc.cc b/src/rgw/rgw_json_enc.cc index f0aa4b71de5..f525c39893e 100644 --- a/src/rgw/rgw_json_enc.cc +++ b/src/rgw/rgw_json_enc.cc @@ -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) diff --git a/src/rgw/rgw_sync_policy.cc b/src/rgw/rgw_sync_policy.cc index 4bd7fbdadab..2ed5fbbe913 100644 --- a/src/rgw/rgw_sync_policy.cc +++ b/src/rgw/rgw_sync_policy.cc @@ -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 > 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& 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) diff --git a/src/rgw/rgw_sync_policy.h b/src/rgw/rgw_sync_policy.h index e03b884af30..3aa28da400c 100644 --- a/src/rgw/rgw_sync_policy.h +++ b/src/rgw/rgw_sync_policy.h @@ -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 > symmetrical; - std::optional > directional; + std::vector symmetrical; + std::vector 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); -- 2.39.5