]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: Read `sync status` from only the zones allowed to sync from 53396/head
authorSoumya Koduri <skoduri@redhat.com>
Wed, 5 Jul 2023 12:15:39 +0000 (17:45 +0530)
committerMykola Golub <mgolub@suse.com>
Mon, 11 Sep 2023 15:30:14 +0000 (18:30 +0300)
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 (trivial: store vs driver)

src/rgw/rgw_admin.cc
src/rgw/services/svc_zone.cc
src/rgw/services/svc_zone.h

index 24754ee747ffc2e9684b8a42a11bcb9188c922a2..a27d6666ab22318265f64d10e56b6b9209c44a91 100644 (file)
@@ -2260,7 +2260,7 @@ static void get_data_sync_status(const rgw_zone_id& source_zone, list<string>& s
     return;
   }
 
-  if (!static_cast<rgw::sal::RadosStore*>(store)->svc()->zone->zone_syncs_from(static_cast<rgw::sal::RadosStore*>(store)->svc()->zone->get_zone(), *sz)) {
+  if (!static_cast<rgw::sal::RadosStore*>(store)->svc()->zone->zone_syncs_from(*sz)) {
     push_ss(ss, status, tab) << string("not syncing from zone");
     flush_ss(ss, status);
     return;
index bea9726f3420d03785c4e33156c75ffceedca30d..56715dc72a206f9e05c72c0d81d93966f9746544 100644 (file)
@@ -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,
index 175fbc2c4a0e415b5656a7fc11629acfbab572b7..9526a0344d632f2a581f3787e77d42bd0c07d4a9 100644 (file)
@@ -105,6 +105,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; }