From: Daniel Gryniewicz Date: Mon, 1 Aug 2022 17:11:36 +0000 (-0400) Subject: RGW - Zipper - Move generic get_zonegroup() to Store X-Git-Tag: v18.0.0~186^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=43ef192e7de813a089c1f5cc8afc64dbc3166a06;p=ceph.git RGW - Zipper - Move generic get_zonegroup() to Store The get_zonegroup() that looks up by ID doesn't belong in the zone. It was there because of a conflation of zone as an object an zone as an interface. Move it to Store where it belongs. Signed-off-by: Daniel Gryniewicz --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 7625ebd2ead..3e0911e8946 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -532,7 +532,7 @@ int rgw_build_bucket_policies(const DoutPrefixProvider *dpp, rgw::sal::Store* st s->bucket_owner = s->bucket_acl->get_owner(); std::unique_ptr zonegroup; - int r = store->get_zone()->get_zonegroup(s->bucket->get_info().zonegroup, &zonegroup); + int r = store->get_zonegroup(s->bucket->get_info().zonegroup, &zonegroup); if (!r) { s->zonegroup_endpoint = zonegroup->get_endpoint(); s->zonegroup_name = zonegroup->get_name(); diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index 6ebb1fc7d04..6be3bbb8f29 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -2033,7 +2033,7 @@ void RGWGetBucketLocation_ObjStore_S3::send_response() std::unique_ptr zonegroup; string api_name; - int ret = store->get_zone()->get_zonegroup(s->bucket->get_info().zonegroup, &zonegroup); + int ret = store->get_zonegroup(s->bucket->get_info().zonegroup, &zonegroup); if (ret >= 0) { api_name = zonegroup->get_api_name(); } else { diff --git a/src/rgw/rgw_sal.h b/src/rgw/rgw_sal.h index 190374119c2..9c74f2d5824 100644 --- a/src/rgw/rgw_sal.h +++ b/src/rgw/rgw_sal.h @@ -320,6 +320,8 @@ class Store { virtual std::string zone_unique_id(uint64_t unique_num) = 0; /** Get a unique Swift transaction ID specific to this zone */ virtual std::string zone_unique_trans_id(const uint64_t unique_num) = 0; + /** Lookup a zonegroup by ID */ + virtual int get_zonegroup(const std::string& id, std::unique_ptr* zonegroup) = 0; /** Get statistics about the cluster represented by this Store */ virtual int cluster_stat(RGWClusterStat& stats) = 0; /** Get a @a Lifecycle object. Used to manage/run lifecycle transitions */ @@ -1483,8 +1485,6 @@ class Zone { virtual std::unique_ptr clone() = 0; /** Get info about the zonegroup containing this zone */ virtual ZoneGroup& get_zonegroup() = 0; - /** Get info about a zonegroup by ID */ - virtual int get_zonegroup(const std::string& id, std::unique_ptr* zonegroup) = 0; /** Get the ID of this zone */ virtual const rgw_zone_id& get_id() = 0; /** Get the name of this zone */ diff --git a/src/rgw/rgw_sal_dbstore.cc b/src/rgw/rgw_sal_dbstore.cc index 1ee85921524..78a1a93fc36 100644 --- a/src/rgw/rgw_sal_dbstore.cc +++ b/src/rgw/rgw_sal_dbstore.cc @@ -540,17 +540,6 @@ namespace rgw::sal { return *zonegroup; } - int DBZone::get_zonegroup(const std::string& id, std::unique_ptr* zg) - { - /* XXX: for now only one zonegroup supported */ - ZoneGroup* group = new DBZoneGroup(store, std::make_unique()); - if (!group) - return -ENOMEM; - - zg->reset(group); - return 0; - } - const RGWZoneParams& DBZone::get_rgw_params() { return *zone_params; @@ -1757,6 +1746,17 @@ namespace rgw::sal { return ""; } + int DBStore::get_zonegroup(const std::string& id, std::unique_ptr* zg) + { + /* XXX: for now only one zonegroup supported */ + ZoneGroup* group = new DBZoneGroup(this, std::make_unique()); + if (!group) + return -ENOMEM; + + zg->reset(group); + return 0; + } + int DBStore::cluster_stat(RGWClusterStat& stats) { return 0; diff --git a/src/rgw/rgw_sal_dbstore.h b/src/rgw/rgw_sal_dbstore.h index 259c8e6caa6..c61f86db096 100644 --- a/src/rgw/rgw_sal_dbstore.h +++ b/src/rgw/rgw_sal_dbstore.h @@ -333,7 +333,6 @@ protected: return std::make_unique(store); } virtual ZoneGroup& get_zonegroup() override; - virtual int get_zonegroup(const std::string& id, std::unique_ptr* zonegroup) override; const RGWZoneParams& get_rgw_params(); virtual const rgw_zone_id& get_id() override; virtual const std::string& get_name() const override; @@ -794,6 +793,7 @@ public: virtual Zone* get_zone() { return &zone; } virtual std::string zone_unique_id(uint64_t unique_num) override; virtual std::string zone_unique_trans_id(const uint64_t unique_num) override; + virtual int get_zonegroup(const std::string& id, std::unique_ptr* zonegroup) override; virtual int cluster_stat(RGWClusterStat& stats) override; virtual std::unique_ptr get_lifecycle(void) override; virtual std::unique_ptr get_completions(void) override; diff --git a/src/rgw/rgw_sal_filter.cc b/src/rgw/rgw_sal_filter.cc index de2aa5f86b6..23354f92cea 100644 --- a/src/rgw/rgw_sal_filter.cc +++ b/src/rgw/rgw_sal_filter.cc @@ -65,21 +65,6 @@ int FilterZoneGroup::get_placement_tier(const rgw_placement_rule& rule, return 0; } -int FilterZone::get_zonegroup(const std::string& id, - std::unique_ptr* zonegroup) -{ - std::unique_ptr ngz; - int ret; - - ret = next->get_zonegroup(id, &ngz); - if (ret != 0) - return ret; - - ZoneGroup* zg = new FilterZoneGroup(std::move(ngz)); - zonegroup->reset(zg); - return 0; -} - int FilterStore::initialize(CephContext *cct, const DoutPrefixProvider *dpp) { zone = std::make_unique(next->get_zone()->clone()); @@ -232,6 +217,21 @@ std::string FilterStore::zone_unique_trans_id(uint64_t unique_num) return next->zone_unique_trans_id(unique_num); } +int FilterStore::get_zonegroup(const std::string& id, + std::unique_ptr* zonegroup) +{ + std::unique_ptr ngz; + int ret; + + ret = next->get_zonegroup(id, &ngz); + if (ret != 0) + return ret; + + ZoneGroup* zg = new FilterZoneGroup(std::move(ngz)); + zonegroup->reset(zg); + return 0; +} + int FilterStore::cluster_stat(RGWClusterStat& stats) { return next->cluster_stat(stats); diff --git a/src/rgw/rgw_sal_filter.h b/src/rgw/rgw_sal_filter.h index 01e347a8d02..6b02dd1a41d 100644 --- a/src/rgw/rgw_sal_filter.h +++ b/src/rgw/rgw_sal_filter.h @@ -105,7 +105,6 @@ public: virtual ZoneGroup& get_zonegroup() override { return *group.get(); } - virtual int get_zonegroup(const std::string& id, std::unique_ptr* zonegroup) override; virtual const rgw_zone_id& get_id() override { return next->get_id(); } @@ -186,6 +185,7 @@ public: virtual Zone* get_zone() override { return zone.get(); } virtual std::string zone_unique_id(uint64_t unique_num) override; virtual std::string zone_unique_trans_id(const uint64_t unique_num) override; + virtual int get_zonegroup(const std::string& id, std::unique_ptr* zonegroup) override; virtual int cluster_stat(RGWClusterStat& stats) override; virtual std::unique_ptr get_lifecycle(void) override; virtual std::unique_ptr get_completions(void) override; diff --git a/src/rgw/rgw_sal_motr.cc b/src/rgw/rgw_sal_motr.cc index ba4feef16ac..28c111d8dd3 100644 --- a/src/rgw/rgw_sal_motr.cc +++ b/src/rgw/rgw_sal_motr.cc @@ -899,16 +899,6 @@ ZoneGroup& MotrZone::get_zonegroup() return zonegroup; } -int MotrZone::get_zonegroup(const std::string& id, std::unique_ptr* group) -{ - /* XXX: for now only one zonegroup supported */ - ZoneGroup* zg; - zg = new MotrZoneGroup(store, zonegroup.get_group()); - - group->reset(zg); - return 0; -} - const rgw_zone_id& MotrZone::get_id() { return cur_zone_id; @@ -2955,6 +2945,16 @@ std::string MotrStore::zone_unique_trans_id(const uint64_t unique_num) return ""; } +int MotrStore::get_zonegroup(const std::string& id, std::unique_ptr* group) +{ + /* XXX: for now only one zonegroup supported */ + ZoneGroup* zg; + zg = new MotrZoneGroup(this, zone.zonegroup.get_group()); + + group->reset(zg); + return 0; +} + int MotrStore::cluster_stat(RGWClusterStat& stats) { return 0; diff --git a/src/rgw/rgw_sal_motr.h b/src/rgw/rgw_sal_motr.h index 9f35d68f85c..6ab7b418756 100644 --- a/src/rgw/rgw_sal_motr.h +++ b/src/rgw/rgw_sal_motr.h @@ -453,7 +453,6 @@ class MotrZone : public StoreZone { return std::make_unique(store); } virtual ZoneGroup& get_zonegroup() override; - virtual int get_zonegroup(const std::string& id, std::unique_ptr* zonegroup) override; virtual const rgw_zone_id& get_id() override; virtual const std::string& get_name() const override; virtual bool is_writeable() override; @@ -936,6 +935,7 @@ class MotrStore : public StoreStore { virtual Zone* get_zone() { return &zone; } virtual std::string zone_unique_id(uint64_t unique_num) override; virtual std::string zone_unique_trans_id(const uint64_t unique_num) override; + virtual int get_zonegroup(const std::string& id, std::unique_ptr* zonegroup) override; virtual int cluster_stat(RGWClusterStat& stats) override; virtual std::unique_ptr get_lifecycle(void) override; virtual std::unique_ptr get_completions(void) override; diff --git a/src/rgw/rgw_sal_rados.cc b/src/rgw/rgw_sal_rados.cc index c063467a2c8..ea93511d083 100644 --- a/src/rgw/rgw_sal_rados.cc +++ b/src/rgw/rgw_sal_rados.cc @@ -1183,6 +1183,23 @@ std::string RadosStore::zone_unique_trans_id(const uint64_t unique_num) return svc()->zone_utils->unique_trans_id(unique_num); } +int RadosStore::get_zonegroup(const std::string& id, + std::unique_ptr* zonegroup) +{ + ZoneGroup* zg; + RGWZoneGroup rzg; + int r = svc()->zone->get_zonegroup(id, rzg); + if (r < 0) + return r; + + zg = new RadosZoneGroup(this, rzg); + if (!zg) + return -ENOMEM; + + zonegroup->reset(zg); + return 0; +} + int RadosStore::cluster_stat(RGWClusterStat& stats) { rados_cluster_stat_t rados_stats; @@ -2943,22 +2960,6 @@ int RadosZoneGroup::get_placement_tier(const rgw_placement_rule& rule, return 0; } -int RadosZone::get_zonegroup(const std::string& id, std::unique_ptr* zonegroup) -{ - ZoneGroup* zg; - RGWZoneGroup rzg; - int r = store->svc()->zone->get_zonegroup(id, rzg); - if (r < 0) - return r; - - zg = new RadosZoneGroup(store, rzg); - if (!zg) - return -ENOMEM; - - zonegroup->reset(zg); - return 0; -} - const rgw_zone_id& RadosZone::get_id() { return store->svc()->zone->zone_id(); diff --git a/src/rgw/rgw_sal_rados.h b/src/rgw/rgw_sal_rados.h index e6965571ce4..e9413e6f426 100644 --- a/src/rgw/rgw_sal_rados.h +++ b/src/rgw/rgw_sal_rados.h @@ -103,7 +103,6 @@ class RadosZone : public StoreZone { return std::make_unique(store, group->clone()); } virtual ZoneGroup& get_zonegroup() override { return *(group.get()); } - virtual int get_zonegroup(const std::string& id, std::unique_ptr* zonegroup) override; virtual const rgw_zone_id& get_id() override; virtual const std::string& get_name() const override; virtual bool is_writeable() override; @@ -155,6 +154,7 @@ class RadosStore : public StoreStore { virtual Zone* get_zone() { return zone.get(); } virtual std::string zone_unique_id(uint64_t unique_num) override; virtual std::string zone_unique_trans_id(const uint64_t unique_num) override; + virtual int get_zonegroup(const std::string& id, std::unique_ptr* zonegroup) override; virtual int cluster_stat(RGWClusterStat& stats) override; virtual std::unique_ptr get_lifecycle(void) override; virtual std::unique_ptr get_completions(void) override;