Using multisite sync policy, zones within a zonegroup can be configured
not to sync from certain zones. Filter such zones while reading sync
status.
Fixes: https://tracker.ceph.com/issues/62014
Signed-off-by: Soumya Koduri <skoduri@redhat.com>
(cherry picked from commit
094460c26b8fdd9a72667800b54a0cfaa5409c88)
Conflicts:
src/rgw/rgw_admin.cc (store vs driver, no static cast)
src/rgw/services/svc_zone.cc (trivial)
src/rgw/services/svc_zone.h (trivial)
return;
}
- if (!store->svc()->zone->zone_syncs_from(store->svc()->zone->get_zone(), *sz)) {
+ if (!store->svc()->zone->zone_syncs_from(*sz)) {
push_ss(ss, status, tab) << string("not syncing from zone");
flush_ss(ss, status);
return;
sync_modules_svc->get_manager()->supports_data_export(source_zone.tier_type);
}
+bool RGWSI_Zone::zone_syncs_from(const RGWZone& source_zone) const
+{
+ auto target_zone = get_zone();
+ bool found = false;
+
+ for (auto s : data_sync_source_zones) {
+ if (s->id == source_zone.id) {
+ found = true;
+ break;
+ }
+ }
+ return found && target_zone.syncs_from(source_zone.name) &&
+ sync_modules_svc->get_manager()->supports_data_export(source_zone.tier_type);
+}
+
int RGWSI_Zone::do_start(optional_yield y, const DoutPrefixProvider *dpp)
{
int ret = sysobj_svc->start(y, dpp);
bool zone_is_writeable();
bool zone_syncs_from(const RGWZone& target_zone, const RGWZone& source_zone) const;
+ bool zone_syncs_from(const RGWZone& source_zone) const;
bool get_redirect_zone_endpoint(string *endpoint);
bool sync_module_supports_writes() const { return writeable_zone; }
bool sync_module_exports_data() const { return exports_data; }