From 6f80c92b3c17f31eb3d1b08e948db06d33842922 Mon Sep 17 00:00:00 2001 From: Orit Wasserman Date: Tue, 22 Sep 2015 17:31:56 +0200 Subject: [PATCH] rgw: fix realm create Signed-off-by: Orit Wasserman --- src/rgw/rgw_admin.cc | 13 ++++++++++--- src/rgw/rgw_json_enc.cc | 2 ++ src/rgw/rgw_rados.cc | 7 +++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 3f74296ada3a2..03dcd7458296e 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -1935,20 +1935,27 @@ int main(int argc, char **argv) return ret; } - ret = store->zonegroup_map.update(realm); + RGWZoneGroupMap zonegroup_map; + ret = zonegroup_map.read(g_ceph_context, store); + if (ret < 0 && ret != -ENOENT) { + cerr << "ERROR: couldn't read zonegroup_map: " << cpp_strerror(-ret) << std::endl; + return ret; + } + + ret = zonegroup_map.update(realm); if (ret < 0) { cerr << "ERROR: couldn't update realm " << realm_name << ": " << cpp_strerror(-ret) << std::endl; return ret; } - ret = store->zonegroup_map.update(g_ceph_context, store, realm.get_current_period(), realm.get_id()); + ret = zonegroup_map.update(g_ceph_context, store, realm.get_current_period(), realm.get_id()); if (ret < 0) { cerr << "ERROR: couldn't update " << realm_name << " current period: " << cpp_strerror(-ret) << std::endl; return ret; } - ret = store->zonegroup_map.store(g_ceph_context, store); + ret = zonegroup_map.store(g_ceph_context, store); if (ret < 0) { cerr << "ERROR: couldn't store zonegroup map info: " << cpp_strerror(-ret) << std::endl; return 1; diff --git a/src/rgw/rgw_json_enc.cc b/src/rgw/rgw_json_enc.cc index d0d98b0ba1308..07584e5cdceca 100644 --- a/src/rgw/rgw_json_enc.cc +++ b/src/rgw/rgw_json_enc.cc @@ -900,12 +900,14 @@ void RGWZoneGroup::decode_json(JSONObj *obj) void RGWPeriodMap::dump(Formatter *f) const { + encode_json("id", id, f); encode_json("zonegroups", zonegroups, f); encode_json("master_zonegroup", master_zonegroup, f); } void RGWPeriodMap::decode_json(JSONObj *obj) { + JSONDecoder::decode_json("id", id, obj); JSONDecoder::decode_json("zonegroups", zonegroups, obj); /* backward compatability with region */ if (zonegroups.empty()) { diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 3104548c4354c..c35d210ed0fc3 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -813,6 +813,8 @@ int RGWPeriod::create() id = uuid_str; epoch = FIRST_EPOCH; + + period_map.id = id; ret = store_info(true); if (ret < 0) { @@ -998,6 +1000,7 @@ int RGWZoneParams::init(CephContext *cct, RGWRados *store, RGWZoneGroup& zonegro void RGWPeriodMap::encode(bufferlist& bl) const { ENCODE_START(1, 1, bl); + ::encode(id, bl); ::encode(zonegroups, bl); ::encode(master_zonegroup, bl); ENCODE_FINISH(bl); @@ -1005,6 +1008,7 @@ void RGWPeriodMap::encode(bufferlist& bl) const { void RGWPeriodMap::decode(bufferlist::iterator& bl) { DECODE_START(1, bl); + ::decode(id, bl); ::decode(zonegroups, bl); ::decode(master_zonegroup, bl); DECODE_FINISH(bl); @@ -1161,14 +1165,13 @@ int RGWZoneGroupMap::update(CephContext *cct, RGWRados *store, Mutex::Locker l(lock); RGWPeriod period(period_id); - derr << "update period " << period_id << " realm " << realm_id << dendl; int ret = period.init(cct, store, realm_id); if (ret < 0) { derr << "failed to init period: " << cpp_strerror(-ret) << dendl; return ret; } - periods[period.get_id()] = period.get_map(); + periods[period_id] = period.get_map(); return 0; } -- 2.39.5