From 9082ed6c23024b94db489eb0d5875de1ee152acd Mon Sep 17 00:00:00 2001 From: Orit Wasserman Date: Wed, 23 Sep 2015 15:15:38 +0200 Subject: [PATCH] radosgw-admin: zone set command should update zonegroupmap Signed-off-by: Orit Wasserman --- src/rgw/rgw_admin.cc | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index d69b5fc71b0e1..c115f8d69a2e6 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -2600,16 +2600,25 @@ int main(int argc, char **argv) } break; case OPT_ZONE_SET: - { + { if (zone_name.empty() && zone_id.empty()) { cerr << "Missing zone name or id " << std::endl; return -EINVAL; } + + RGWRealm realm(realm_id, realm_name); + int ret = realm.init(g_ceph_context, store); + if (ret < 0) { + cerr << "failed to init realm: " << cpp_strerror(-ret) << std::endl; + return -ret; + } + RGWZoneGroup zonegroup(zonegroup_id,zonegroup_name); - int ret = zonegroup.init(g_ceph_context, store); + ret = zonegroup.init(g_ceph_context, store); if (ret < 0) { cerr << "WARNING: failed to initialize zonegroup" << std::endl; } + RGWZoneParams zone(zone_name); ret = zone.init(g_ceph_context, store, zonegroup, false); if (ret < 0) { @@ -2628,6 +2637,7 @@ int main(int argc, char **argv) /* old version may overide the name and id */ zone.set_name(zone_name); zone.set_id(zone_id); + ret = zone.update(); if (ret < 0) { cerr << "ERROR: couldn't update zone: " << cpp_strerror(-ret) << std::endl; @@ -2638,6 +2648,25 @@ int main(int argc, char **argv) cerr << "ERROR: couldn't add zone: " << cpp_strerror(-ret) << std::endl; return 1; } + + 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(g_ceph_context, store, realm, zonegroup); + if (ret < 0) { + cerr << "failed to update zonegroup_map: " << cpp_strerror(-ret) << std::endl; + return -ret; + } + ret = zonegroup_map.store(g_ceph_context, store); + if (ret < 0) { + cerr << "failed to store zonegroup_map: " << cpp_strerror(-ret) << std::endl; + return -ret; + } + encode_json("zone", zone, formatter); formatter->flush(cout); } -- 2.39.5