]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix pipes zone wildcard match logic
authorYehuda Sadeh <yehuda@redhat.com>
Wed, 27 Nov 2019 01:37:26 +0000 (17:37 -0800)
committerYehuda Sadeh <yehuda@redhat.com>
Tue, 28 Jan 2020 18:20:39 +0000 (10:20 -0800)
and improve logging

Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_bucket_sync.cc
src/rgw/rgw_bucket_sync.h
src/rgw/rgw_sync_policy.cc
src/rgw/rgw_sync_policy.h

index 4095804baf03216b987ea699d7b4bffed9b9e412..d9a01d1274c4faa28843c57ff0096078c5b712b6 100644 (file)
@@ -141,7 +141,8 @@ pair<zb_pipe_map_t::const_iterator, zb_pipe_map_t::const_iterator> rgw_sync_grou
 
 
 template <typename CB>
-void rgw_sync_group_pipe_map::init(const rgw_zone_id& _zone,
+void rgw_sync_group_pipe_map::init(CephContext *cct,
+                                   const rgw_zone_id& _zone,
                                    std::optional<rgw_bucket> _bucket,
                                    const rgw_sync_policy_group& group,
                                    rgw_sync_data_flow_group *_default_flow,
@@ -158,9 +159,12 @@ void rgw_sync_group_pipe_map::init(const rgw_zone_id& _zone,
 
   std::vector<rgw_sync_bucket_pipes> zone_pipes;
 
+  string bucket_key = (bucket ? bucket->get_key() : "*");
+
   /* only look at pipes that touch the specific zone and bucket */
   for (auto& pipe : group.pipes) {
     if (pipe.contains_zone_bucket(zone, bucket)) {
+      ldout(cct, 20) << __func__ << "(): pipe_map (zone=" << zone << " bucket=" << bucket_key << "): adding potential pipe: " << pipe << dendl;
       zone_pipes.push_back(pipe);
     }
   }
@@ -526,7 +530,7 @@ void RGWBucketSyncFlowManager::init(const rgw_sync_policy_info& sync_policy) {
     auto& group = item.second;
     auto& flow_group_map = flow_groups[group.id];
 
-    flow_group_map.init(zone_id, bucket, group,
+    flow_group_map.init(cct, zone_id, bucket, group,
                         (default_flow ? &(*default_flow) : nullptr),
                         &all_zones,
                         [&](const rgw_zone_id& source_zone,
@@ -551,10 +555,10 @@ void RGWBucketSyncFlowManager::reflect(std::optional<rgw_bucket> effective_bucke
                                        bool only_enabled) const
 
 {
-  rgw_sync_bucket_entity entity;
-  entity.zone = zone_id;
-  entity.bucket = effective_bucket.value_or(rgw_bucket());
-
+  string effective_bucket_key;
+  if (effective_bucket) {
+    effective_bucket_key = effective_bucket->get_key();
+  }
   if (parent) {
     parent->reflect(effective_bucket, source_pipes, dest_pipes, only_enabled);
   }
@@ -577,6 +581,7 @@ void RGWBucketSyncFlowManager::reflect(std::optional<rgw_bucket> effective_bucke
       pipe.source.apply_bucket(effective_bucket);
       pipe.dest.apply_bucket(effective_bucket);
 
+      ldout(cct, 20) << __func__ << "(): flow manager (bucket=" << effective_bucket_key << "): adding source pipe: " << pipe << dendl;
       source_pipes->insert(pipe);
     }
 
@@ -590,15 +595,18 @@ void RGWBucketSyncFlowManager::reflect(std::optional<rgw_bucket> effective_bucke
       pipe.source.apply_bucket(effective_bucket);
       pipe.dest.apply_bucket(effective_bucket);
 
+      ldout(cct, 20) << __func__ << "(): flow manager (bucket=" << effective_bucket_key << "): adding dest pipe: " << pipe << dendl;
       dest_pipes->insert(pipe);
     }
   }
 }
 
 
-RGWBucketSyncFlowManager::RGWBucketSyncFlowManager(const rgw_zone_id& _zone_id,
+RGWBucketSyncFlowManager::RGWBucketSyncFlowManager(CephContext *_cct,
+                                                   const rgw_zone_id& _zone_id,
                                                    std::optional<rgw_bucket> _bucket,
-                                                   const RGWBucketSyncFlowManager *_parent) : zone_id(_zone_id),
+                                                   const RGWBucketSyncFlowManager *_parent) : cct(_cct),
+                                                                                              zone_id(_zone_id),
                                                                                               bucket(_bucket),
                                                                                               parent(_parent) {}
 
@@ -660,7 +668,8 @@ RGWBucketSyncPolicyHandler::RGWBucketSyncPolicyHandler(RGWSI_Zone *_zone_svc,
                                                        std::optional<rgw_zone_id> effective_zone) : zone_svc(_zone_svc) ,
                                                                                                     bucket_sync_svc(_bucket_sync_svc) {
   zone_id = effective_zone.value_or(zone_svc->zone_id());
-  flow_mgr.reset(new RGWBucketSyncFlowManager(zone_id,
+  flow_mgr.reset(new RGWBucketSyncFlowManager(zone_svc->ctx(),
+                                              zone_id,
                                               nullopt,
                                               nullptr));
   sync_policy = zone_svc->get_zonegroup().sync_policy;
@@ -690,7 +699,8 @@ RGWBucketSyncPolicyHandler::RGWBucketSyncPolicyHandler(const RGWBucketSyncPolicy
   bucket = _bucket_info.bucket;
   zone_svc = parent->zone_svc;
   bucket_sync_svc = parent->bucket_sync_svc;
-  flow_mgr.reset(new RGWBucketSyncFlowManager(parent->zone_id,
+  flow_mgr.reset(new RGWBucketSyncFlowManager(zone_svc->ctx(),
+                                              parent->zone_id,
                                               _bucket_info.bucket,
                                               parent->flow_mgr.get()));
 }
@@ -704,7 +714,8 @@ RGWBucketSyncPolicyHandler::RGWBucketSyncPolicyHandler(const RGWBucketSyncPolicy
   bucket = _bucket;
   zone_svc = parent->zone_svc;
   bucket_sync_svc = parent->bucket_sync_svc;
-  flow_mgr.reset(new RGWBucketSyncFlowManager(parent->zone_id,
+  flow_mgr.reset(new RGWBucketSyncFlowManager(zone_svc->ctx(),
+                                              parent->zone_id,
                                               _bucket,
                                               parent->flow_mgr.get()));
 }
index 6f7cdbf00e517eee6cf8810ca5559e060810bc73..6ad291218a30e7be3fe14e1a90100257ffd5b18a 100644 (file)
@@ -70,7 +70,8 @@ struct rgw_sync_group_pipe_map {
                                                                                 std::optional<rgw_bucket> b) const;
 
   template <typename CB>
-  void init(const rgw_zone_id& _zone,
+  void init(CephContext *cct,
+            const rgw_zone_id& _zone,
             std::optional<rgw_bucket> _bucket,
             const rgw_sync_policy_group& group,
             rgw_sync_data_flow_group *_default_flow,
@@ -234,6 +235,8 @@ public:
 
 private:
 
+  CephContext *cct;
+
   rgw_zone_id zone_id;
   std::optional<rgw_bucket> bucket;
 
@@ -258,7 +261,8 @@ private:
 
 public:
 
-  RGWBucketSyncFlowManager(const rgw_zone_id& _zone_id,
+  RGWBucketSyncFlowManager(CephContext *_cct,
+                           const rgw_zone_id& _zone_id,
                            std::optional<rgw_bucket> _bucket,
                            const RGWBucketSyncFlowManager *_parent);
 
index 1e700299f350585e667ccdc1627126c65086950f..d04f632d397a59265a3a97e7e9d4b7bf217652aa 100644 (file)
@@ -193,6 +193,8 @@ void rgw_sync_bucket_entities::add_zones(const std::vector<rgw_zone_id>& new_zon
     }
 
     zones->insert(z);
+
+    all_zones = false;
   }
 }
 
index 091ce7ddce09c5d8114cc0750eabca784fe2e9f9..58e05d0f8a6b73e5143f782b4d15d9a7af6e4461 100644 (file)
@@ -470,9 +470,10 @@ struct rgw_sync_bucket_entities {
                      std::optional<string> bucket_id);
 
   bool match_zone(const rgw_zone_id& zone) const {
-    if (all_zones) {
-      return true;
-    } else if (!zones) {
+    if (!zones) {
+      if (all_zones) {
+       return true;
+      }
       return false;
     }