return false;
}
-int RGWZoneGroupMap::read(const DoutPrefixProvider *dpp, CephContext *cct, RGWSI_SysObj *sysobj_svc, optional_yield y)
-{
-
- RGWPeriod period;
- int ret = period.init(dpp, cct, sysobj_svc, y);
- if (ret < 0) {
- cerr << "failed to read current period info: " << cpp_strerror(ret);
- return ret;
- }
-
- quota.bucket_quota = period.get_config().quota.bucket_quota;
- quota.user_quota = period.get_config().quota.user_quota;
- zonegroups = period.get_map().zonegroups;
- zonegroups_by_api = period.get_map().zonegroups_by_api;
- master_zonegroup = period.get_map().master_zonegroup;
-
- return 0;
-}
-
-void RGWRegionMap::encode(bufferlist& bl) const {
- ENCODE_START( 3, 1, bl);
- encode(regions, bl);
- encode(master_region, bl);
- encode(quota.bucket_quota, bl);
- encode(quota.user_quota, bl);
- ENCODE_FINISH(bl);
-}
-
-void RGWRegionMap::decode(bufferlist::const_iterator& bl) {
- DECODE_START(3, bl);
- decode(regions, bl);
- decode(master_region, bl);
- if (struct_v >= 2)
- decode(quota.bucket_quota, bl);
- if (struct_v >= 3)
- decode(quota.user_quota, bl);
- DECODE_FINISH(bl);
-}
-
-void RGWZoneGroupMap::encode(bufferlist& bl) const {
- ENCODE_START( 3, 1, bl);
- encode(zonegroups, bl);
- encode(master_zonegroup, bl);
- encode(quota.bucket_quota, bl);
- encode(quota.user_quota, bl);
- ENCODE_FINISH(bl);
-}
-
-void RGWZoneGroupMap::decode(bufferlist::const_iterator& bl) {
- DECODE_START(3, bl);
- decode(zonegroups, bl);
- decode(master_zonegroup, bl);
- if (struct_v >= 2)
- decode(quota.bucket_quota, bl);
- if (struct_v >= 3)
- decode(quota.user_quota, bl);
- DECODE_FINISH(bl);
-
- zonegroups_by_api.clear();
- for (map<string, RGWZoneGroup>::iterator iter = zonegroups.begin();
- iter != zonegroups.end(); ++iter) {
- RGWZoneGroup& zonegroup = iter->second;
- zonegroups_by_api[zonegroup.api_name] = zonegroup;
- if (zonegroup.is_master_zonegroup()) {
- master_zonegroup = zonegroup.get_name();
- }
- }
-}
-
static inline int conf_to_uint64(const JSONFormattable& config, const string& key, uint64_t *pval)
{
string sval;
JSONDecoder::decode_json("bucket_ratelimit", bucket_ratelimit, obj);
JSONDecoder::decode_json("anonymous_ratelimit", anon_ratelimit, obj);
}
-
-void RGWRegionMap::dump(Formatter *f) const
-{
- encode_json("regions", regions, f);
- encode_json("master_region", master_region, f);
- encode_json("bucket_quota", quota.bucket_quota, f);
- encode_json("user_quota", quota.user_quota, f);
-}
-
-void RGWRegionMap::decode_json(JSONObj *obj)
-{
- JSONDecoder::decode_json("regions", regions, obj);
- JSONDecoder::decode_json("master_region", master_region, obj);
- JSONDecoder::decode_json("bucket_quota", quota.bucket_quota, obj);
- JSONDecoder::decode_json("user_quota", quota.user_quota, obj);
-}
-
-void RGWZoneGroupMap::dump(Formatter *f) const
-{
- encode_json("zonegroups", zonegroups, f);
- encode_json("master_zonegroup", master_zonegroup, f);
- encode_json("bucket_quota", quota.bucket_quota, f);
- encode_json("user_quota", quota.user_quota, f);
-}
-
-void RGWZoneGroupMap::decode_json(JSONObj *obj)
-{
- JSONDecoder::decode_json("zonegroups", zonegroups, obj);
- /* backward compatability with region */
- if (zonegroups.empty()) {
- JSONDecoder::decode_json("regions", zonegroups, obj);
- }
- JSONDecoder::decode_json("master_zonegroup", master_zonegroup, obj);
- /* backward compatability with region */
- if (master_zonegroup.empty()) {
- JSONDecoder::decode_json("master_region", master_zonegroup, obj);
- }
-
- JSONDecoder::decode_json("bucket_quota", quota.bucket_quota, obj);
- JSONDecoder::decode_json("user_quota", quota.user_quota, obj);
-}
-
};
WRITE_CLASS_ENCODER(RGWPeriodConfig)
-/* for backward comaptability */
-struct RGWRegionMap {
-
- std::map<std::string, RGWZoneGroup> regions;
-
- std::string master_region;
-
- RGWQuota quota;
-
- void encode(bufferlist& bl) const;
- void decode(bufferlist::const_iterator& bl);
-
- void dump(Formatter *f) const;
- void decode_json(JSONObj *obj);
-};
-WRITE_CLASS_ENCODER(RGWRegionMap)
-
-struct RGWZoneGroupMap {
-
- std::map<std::string, RGWZoneGroup> zonegroups;
- std::map<std::string, RGWZoneGroup> zonegroups_by_api;
-
- std::string master_zonegroup;
-
- RGWQuota quota;
-
- /* construct the map */
- int read(const DoutPrefixProvider *dpp, CephContext *cct, RGWSI_SysObj *sysobj_svc, optional_yield y);
-
- void encode(bufferlist& bl) const;
- void decode(bufferlist::const_iterator& bl);
-
- void dump(Formatter *f) const;
- void decode_json(JSONObj *obj);
-};
-WRITE_CLASS_ENCODER(RGWZoneGroupMap)
-
class RGWRealm;
class RGWPeriod;
return ret;
}
- ret = convert_regionmap(dpp, y);
- if (ret < 0) {
- ldpp_dout(dpp, -1) << "failed converting regionmap: " << cpp_strerror(-ret) << dendl;
- return ret;
- }
-
auto zone_iter = zonegroup->zones.find(zone_params->get_id());
if (zone_iter == zonegroup->zones.end()) {
/* shouldn't happen if relying on period config */
return 0;
}
-int RGWSI_Zone::convert_regionmap(const DoutPrefixProvider *dpp, optional_yield y)
-{
- RGWZoneGroupMap zonegroupmap;
-
- string pool_name = cct->_conf->rgw_zone_root_pool;
- if (pool_name.empty()) {
- pool_name = RGW_DEFAULT_ZONE_ROOT_POOL;
- }
- string oid = region_map_oid;
-
- rgw_pool pool(pool_name);
- bufferlist bl;
-
- RGWSysObj sysobj = sysobj_svc->get_obj(rgw_raw_obj(pool, oid));
-
- int ret = sysobj.rop().read(dpp, &bl, y);
- if (ret < 0 && ret != -ENOENT) {
- return ret;
- } else if (ret == -ENOENT) {
- return 0;
- }
-
- try {
- auto iter = bl.cbegin();
- decode(zonegroupmap, iter);
- } catch (buffer::error& err) {
- ldpp_dout(dpp, 0) << "error decoding regionmap from " << pool << ":" << oid << dendl;
- return -EIO;
- }
-
- for (map<string, RGWZoneGroup>::iterator iter = zonegroupmap.zonegroups.begin();
- iter != zonegroupmap.zonegroups.end(); ++iter) {
- RGWZoneGroup& zonegroup = iter->second;
- ret = zonegroup.init(dpp, cct, sysobj_svc, y, false);
- ret = zonegroup.update(dpp, y);
- if (ret < 0 && ret != -ENOENT) {
- ldpp_dout(dpp, 0) << "Error could not update zonegroup " << zonegroup.get_name() << ": " <<
- cpp_strerror(-ret) << dendl;
- return ret;
- } else if (ret == -ENOENT) {
- ret = zonegroup.create(dpp, y);
- if (ret < 0) {
- ldpp_dout(dpp, 0) << "Error could not create " << zonegroup.get_name() << ": " <<
- cpp_strerror(-ret) << dendl;
- return ret;
- }
- }
- }
-
- current_period->set_user_quota(zonegroupmap.quota.user_quota);
- current_period->set_bucket_quota(zonegroupmap.quota.bucket_quota);
-
- // remove the region_map so we don't try to convert again
- ret = sysobj.wop().remove(dpp, y);
- if (ret < 0) {
- ldpp_dout(dpp, 0) << "Error could not remove " << sysobj.get_obj()
- << " after upgrading to zonegroup map: " << cpp_strerror(ret) << dendl;
- return ret;
- }
-
- return 0;
-}
-
const RGWZoneParams& RGWSI_Zone::get_zone_params() const
{
return *zone_params;