From 094460c26b8fdd9a72667800b54a0cfaa5409c88 Mon Sep 17 00:00:00 2001 From: Soumya Koduri Date: Wed, 5 Jul 2023 17:45:39 +0530 Subject: [PATCH] rgw: Read `sync status` from only the zones allowed to sync from 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 --- src/rgw/rgw_admin.cc | 2 +- src/rgw/services/svc_zone.cc | 15 +++++++++++++++ src/rgw/services/svc_zone.h | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 210d56f719e84..6bbf8cb0e1718 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -2255,7 +2255,7 @@ static void get_data_sync_status(const rgw_zone_id& source_zone, list& s return; } - if (!static_cast(driver)->svc()->zone->zone_syncs_from(static_cast(driver)->svc()->zone->get_zone(), *sz)) { + if (!static_cast(driver)->svc()->zone->zone_syncs_from(*sz)) { push_ss(ss, status, tab) << string("not syncing from zone"); flush_ss(ss, status); return; diff --git a/src/rgw/services/svc_zone.cc b/src/rgw/services/svc_zone.cc index 3f810d7acd245..180d9371222bf 100644 --- a/src/rgw/services/svc_zone.cc +++ b/src/rgw/services/svc_zone.cc @@ -65,6 +65,21 @@ bool RGWSI_Zone::zone_syncs_from(const RGWZone& target_zone, const RGWZone& sour 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::search_realm_with_zone(const DoutPrefixProvider *dpp, const rgw_zone_id& zid, RGWRealm *prealm, diff --git a/src/rgw/services/svc_zone.h b/src/rgw/services/svc_zone.h index 00d4c0f4992e0..7b0a277c439fd 100644 --- a/src/rgw/services/svc_zone.h +++ b/src/rgw/services/svc_zone.h @@ -103,6 +103,7 @@ public: 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(std::string *endpoint); bool sync_module_supports_writes() const { return writeable_zone; } bool sync_module_exports_data() const { return exports_data; } -- 2.39.5