From: Yehuda Sadeh Date: Wed, 27 Nov 2019 01:37:26 +0000 (-0800) Subject: rgw: fix pipes zone wildcard match logic X-Git-Tag: v15.1.0~22^2~34 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dc742e466ff577a380400f803c3e53f5d4980979;p=ceph.git rgw: fix pipes zone wildcard match logic and improve logging Signed-off-by: Yehuda Sadeh --- diff --git a/src/rgw/rgw_bucket_sync.cc b/src/rgw/rgw_bucket_sync.cc index 4095804baf032..d9a01d1274c4f 100644 --- a/src/rgw/rgw_bucket_sync.cc +++ b/src/rgw/rgw_bucket_sync.cc @@ -141,7 +141,8 @@ pair rgw_sync_grou template -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 _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 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 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 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 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 _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 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())); } diff --git a/src/rgw/rgw_bucket_sync.h b/src/rgw/rgw_bucket_sync.h index 6f7cdbf00e517..6ad291218a30e 100644 --- a/src/rgw/rgw_bucket_sync.h +++ b/src/rgw/rgw_bucket_sync.h @@ -70,7 +70,8 @@ struct rgw_sync_group_pipe_map { std::optional b) const; template - void init(const rgw_zone_id& _zone, + void init(CephContext *cct, + const rgw_zone_id& _zone, std::optional _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 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 _bucket, const RGWBucketSyncFlowManager *_parent); diff --git a/src/rgw/rgw_sync_policy.cc b/src/rgw/rgw_sync_policy.cc index 1e700299f3505..d04f632d397a5 100644 --- a/src/rgw/rgw_sync_policy.cc +++ b/src/rgw/rgw_sync_policy.cc @@ -193,6 +193,8 @@ void rgw_sync_bucket_entities::add_zones(const std::vector& new_zon } zones->insert(z); + + all_zones = false; } } diff --git a/src/rgw/rgw_sync_policy.h b/src/rgw/rgw_sync_policy.h index 091ce7ddce09c..58e05d0f8a6b7 100644 --- a/src/rgw/rgw_sync_policy.h +++ b/src/rgw/rgw_sync_policy.h @@ -470,9 +470,10 @@ struct rgw_sync_bucket_entities { std::optional 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; }