From e020790a57e97fbfef7987904e29163fc353c701 Mon Sep 17 00:00:00 2001 From: Orit Wasserman Date: Wed, 23 Sep 2015 16:40:47 +0200 Subject: [PATCH] radosgw-admin: zone set should handle old format json (without name or id) Signed-off-by: Orit Wasserman --- src/rgw/rgw_admin.cc | 76 ++++++++++++++------------------------------ 1 file changed, 23 insertions(+), 53 deletions(-) diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 38d49627f8ae8..b89af97d46e21 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -2347,6 +2347,9 @@ int main(int argc, char **argv) } } + encode_json("zonegroup", zonegroup, formatter); + formatter->flush(cout); + RGWZoneGroupMap zonegroup_map; ret = zonegroup_map.read(g_ceph_context, store); if (ret < 0 && ret != -ENOENT) { @@ -2633,70 +2636,37 @@ 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); + RGWZoneParams zone(zone_name); + int ret = zone.init(g_ceph_context, store, false); if (ret < 0) { - cerr << "failed to init realm: " << cpp_strerror(-ret) << std::endl; return -ret; } - RGWZoneGroup zonegroup(zonegroup_id,zonegroup_name); - ret = zonegroup.init(g_ceph_context, store); + ret = read_decode_json(infile, zone); if (ret < 0) { - cerr << "WARNING: failed to initialize zonegroup" << std::endl; + return 1; } - - RGWZoneParams zone(zone_name); - ret = zone.init(g_ceph_context, store, zonegroup, false); - if (ret < 0) { - return -ret; + + if (zone.get_id().empty() && zone.get_name().empty()) { + cerr << "no zone name id or name in the json provided , assuming old format" << std::endl; + if (zone_name.empty()) { + cerr << "missing zone name" << std::endl; + return -EINVAL; + } + zone.set_name(zone_name); + zone.set_id(zone_name); } + ret = zone.create(); if (ret < 0 && ret != -EEXIST) { cerr << "ERROR: couldn't create zone: " << cpp_strerror(-ret) << std::endl; return 1; - } - zone_id = zone.get_id(); - ret = read_decode_json(infile, zone); - if (ret < 0) { - return 1; - } - /* 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; - return 1; - } - ret = zonegroup.add_zone(zone); - if (ret < 0) { - 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; + } if (ret == -EEXIST) { + ret = zone.update(); + if (ret < 0) { + cerr << "ERROR: couldn't update zone: " << cpp_strerror(-ret) << std::endl; + return 1; + } } encode_json("zone", zone, formatter); -- 2.39.5