From bded7eb7592f9179156d65103f95c2c5471ae798 Mon Sep 17 00:00:00 2001 From: Orit Wasserman Date: Thu, 24 Sep 2015 12:48:09 +0200 Subject: [PATCH] rgw: add RGWRegionMap for backward support Signed-off-by: Orit Wasserman --- src/rgw/rgw_json_enc.cc | 15 +++++++++++++++ src/rgw/rgw_rados.cc | 31 +++++++++++++++++++++++++++++++ src/rgw/rgw_rados.h | 17 +++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/src/rgw/rgw_json_enc.cc b/src/rgw/rgw_json_enc.cc index 90ae63f0a8dd3..52d57aa1ccd1a 100644 --- a/src/rgw/rgw_json_enc.cc +++ b/src/rgw/rgw_json_enc.cc @@ -957,6 +957,21 @@ void RGWZoneGroupMap::decode_json(JSONObj *obj) JSONDecoder::decode_json("user_quota", user_quota, obj); } +void RGWRegionMap::dump(Formatter *f) const +{ + encode_json("regions", regions, f); + encode_json("master_region", master_region, f); + encode_json("bucket_quota", bucket_quota, f); + encode_json("user_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("user_quota", user_quota, obj); +} + void RGWMetadataLogInfo::dump(Formatter *f) const { encode_json("marker", marker, f); diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 57ace72e87c5d..58646ee577a0f 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -1056,6 +1056,37 @@ int RGWPeriodMap::update(const RGWZoneGroup& zonegroup) return 0; } +void RGWRegionMap::encode(bufferlist& bl) const { + ENCODE_START(3, 1, bl); + ::encode(regions, bl); + ::encode(master_region, bl); + ::encode(bucket_quota, bl); + ::encode(user_quota, bl); + ENCODE_FINISH(bl); +} + +void RGWRegionMap::decode(bufferlist::iterator& bl) { + DECODE_START(3, bl); + ::decode(regions, bl); + ::decode(master_region, bl); + + if (struct_v >= 2) + ::decode(bucket_quota, bl); + if (struct_v >= 3) + ::decode(user_quota, bl); + DECODE_FINISH(bl); + + regions_by_api.clear(); + for (map::iterator iter = regions.begin(); + iter != regions.end(); ++iter) { + RGWZoneGroup& region = iter->second; + regions_by_api[region.api_name] = region; + if (region.is_master) { + master_region = region.get_name(); + } + } +} + void RGWZoneGroupMap::encode(bufferlist& bl) const { ENCODE_START(4, 1, bl); ::encode(realms, bl); diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index 4446db32c3a63..ed851607dd397 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -1155,6 +1155,23 @@ struct RGWPeriodMap }; WRITE_CLASS_ENCODER(RGWPeriodMap) +struct RGWRegionMap { + map regions; + map regions_by_api; + + string master_region; + + RGWQuotaInfo bucket_quota; + RGWQuotaInfo user_quota; + + void encode(bufferlist& bl) const; + void decode(bufferlist::iterator& bl); + + void dump(Formatter *f) const; + void decode_json(JSONObj *obj); +}; +WRITE_CLASS_ENCODER(RGWRegionMap) + class RGWRealm; struct RGWZoneGroupMap { -- 2.39.5