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);
}
}
}
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)
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;
return false;
}
- auto& group = symmetrical->emplace_back();
+ auto& group = symmetrical.emplace_back();
*flow_group = &group;
(*flow_group)->id = flow_id;
return true;
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();
if (!zones) {
groups.erase(iter);
if (groups.empty()) {
- symmetrical.reset();
+ symmetrical.clear();
}
return;
}
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;
return false;
}
- auto& rule = directional->emplace_back();
+ auto& rule = directional.emplace_back();
*flow_group = &rule;
rule.source_zone = 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;
}
}
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)
* 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);
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);