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("bucket_quota", bucket_quota, obj);
+ JSONDecoder::decode_json("user_quota", user_quota, obj);
+}
+
void RGWZoneGroupMap::dump(Formatter *f) const
{
encode_json("zonegroups", zonegroups, f);
return 0;
}
-
int RGWZoneGroupMap::read(CephContext *cct, RGWRados *store) {
RGWPeriod period;
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);
+}
+
void RGWZoneGroupMap::encode(bufferlist& bl) const {
ENCODE_START( 3, 1, bl);
::encode(zonegroups, bl);
*/
int RGWRados::replace_region_with_zonegroup()
{
+
/* copy default region */
/* convert default region to default zonegroup */
string default_oid = cct->_conf->rgw_default_region_info_oid;
lderr(cct) << "failed to list regions: ret "<< ret << " " << cpp_strerror(-ret) << dendl;
return ret;
}
-
list<string>::iterator iter;
/* create zonegroups */
for (iter = regions.begin(); iter != regions.end(); ++iter)
WRITE_CLASS_ENCODER(RGWPeriodConfig)
/* for backward comaptability */
+struct RGWRegionMap {
+
+ map<string, RGWZoneGroup> regions;
+
+ 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)
+
struct RGWZoneGroupMap {
map<string, RGWZoneGroup> zonegroups;
#define dout_subsys ceph_subsys_rgw
void RGWOp_ZoneGroupMap_Get::execute() {
- http_ret = zone_group_map.read(g_ceph_context, store);
+ http_ret = zonegroup_map.read(g_ceph_context, store);
if (http_ret < 0) {
dout(5) << "failed to read zone_group map" << dendl;
}
if (http_ret < 0)
return;
-
- encode_json("region-map", zone_group_map, s->formatter);
- flusher.flush();
+
+ if (old_format) {
+ RGWRegionMap region_map;
+ region_map.regions = zonegroup_map.zonegroups;
+ region_map.master_region = zonegroup_map.master_zonegroup;
+ region_map.bucket_quota = zonegroup_map.bucket_quota;
+ region_map.user_quota = zonegroup_map.user_quota;
+ encode_json("region-map", region_map, s->formatter);
+ } else {
+ encode_json("zonegroup-map", zonegroup_map, s->formatter);
+ }
+ flusher.flush();
+}
+
+RGWOp* RGWHandler_Config::op_get() {
+ bool exists;
+ string type = s->info.args.get("type", &exists);
+
+ if (type.compare("zonegroup-map") == 0) {
+ return new RGWOp_ZoneGroupMap_Get(false);
+ } else {
+ return new RGWOp_ZoneGroupMap_Get(true);
+ }
}
#define CEPH_RGW_REST_CONFIG_H
class RGWOp_ZoneGroupMap_Get : public RGWRESTOp {
- RGWZoneGroupMap zone_group_map;
+ RGWZoneGroupMap zonegroup_map;
+ bool old_format;
public:
- RGWOp_ZoneGroupMap_Get() {}
+ RGWOp_ZoneGroupMap_Get(bool _old_format) : old_format(_old_format) {}
~RGWOp_ZoneGroupMap_Get() {}
int verify_permission() {
void execute();
virtual void send_response();
virtual const string name() {
- return "get_region_map";
+ if (old_format) {
+ return "get_region_map";
+ } else {
+ return "get_zonegroup_map";
+ }
}
};
class RGWHandler_Config : public RGWHandler_Auth_S3 {
protected:
- RGWOp *op_get() { return new RGWOp_ZoneGroupMap_Get; }
+ RGWOp *op_get();
int read_permissions(RGWOp*) {
return 0;