From 3fc65d146cc413b9769864af96f81582cb2c8dac Mon Sep 17 00:00:00 2001 From: Orit Wasserman Date: Tue, 8 Sep 2015 14:28:07 +0200 Subject: [PATCH] rgw: fix zone set command Signed-off-by: Orit Wasserman --- src/rgw/rgw_admin.cc | 23 +++++++++++++++++++---- src/rgw/rgw_json_enc.cc | 8 +++++--- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 81a4ec2ec16af..96eae4cb3d8ea 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -2063,11 +2063,16 @@ int main(int argc, char **argv) return 1; } ret = zonegroup.create(); - if (ret < 0) { - cerr << "ERROR: couldn't store zone info: " << cpp_strerror(-ret) << std::endl; + if (ret < 0 && ret != -EEXIST) { + cerr << "ERROR: couldn't create zonegroup info: " << cpp_strerror(-ret) << std::endl; return 1; + } else if (ret == -EEXIST) { + ret = zonegroup.update(); + if (ret < 0) { + cerr << "ERROR: couldn't store zonegroup info: " << cpp_strerror(-ret) << std::endl; + return 1; + } } - encode_json("zonegroup", zonegroup, formatter); formatter->flush(cout); } @@ -2254,10 +2259,20 @@ int main(int argc, char **argv) if (ret < 0) { return 1; } + if (zone.get_name().empty() && zone.get_id().empty()) { + cerr << "ERROR: missing zone name " << cpp_strerror(-ret) << std::endl; + return 1; + } ret = zone.create(); - if (ret < 0) { + if (ret < 0 && ret != -EEXIST) { cerr << "ERROR: couldn't create zone: " << cpp_strerror(-ret) << std::endl; return 1; + } else if (ret == -EEXIST) { + 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) { diff --git a/src/rgw/rgw_json_enc.cc b/src/rgw/rgw_json_enc.cc index 4ab68b2315987..fe6b8e451ad6d 100644 --- a/src/rgw/rgw_json_enc.cc +++ b/src/rgw/rgw_json_enc.cc @@ -765,7 +765,6 @@ void RGWPeriod::decode_json(JSONObj *obj) void RGWZoneParams::dump(Formatter *f) const { encode_json("domain_root", domain_root.data_pool, f); - encode_json("metadata_heap", metadata_heap.data_pool, f); encode_json("control_pool", control_pool.data_pool, f); encode_json("gc_pool", gc_pool.data_pool, f); encode_json("log_pool", log_pool.data_pool, f); @@ -775,8 +774,10 @@ void RGWZoneParams::dump(Formatter *f) const encode_json("user_email_pool", user_email_pool.data_pool, f); encode_json("user_swift_pool", user_swift_pool.data_pool, f); encode_json("user_uid_pool", user_uid_pool.data_pool, f); + RGWSystemMetaObj::dump(f); encode_json_plain("system_key", system_key, f); encode_json("placement_pools", placement_pools, f); + encode_json("metadata_heap", metadata_heap.data_pool, f); } static void decode_json(const char *field, rgw_bucket& bucket, JSONObj *obj) @@ -806,7 +807,6 @@ void RGWZonePlacementInfo::decode_json(JSONObj *obj) void RGWZoneParams::decode_json(JSONObj *obj) { ::decode_json("domain_root", domain_root, obj); - ::decode_json("metadata_heap", metadata_heap, obj); ::decode_json("control_pool", control_pool, obj); ::decode_json("gc_pool", gc_pool, obj); ::decode_json("log_pool", log_pool, obj); @@ -814,10 +814,12 @@ void RGWZoneParams::decode_json(JSONObj *obj) ::decode_json("usage_log_pool", usage_log_pool, obj); ::decode_json("user_keys_pool", user_keys_pool, obj); ::decode_json("user_email_pool", user_email_pool, obj); - ::decode_json("user_uid_pool", user_uid_pool, obj); ::decode_json("user_swift_pool", user_swift_pool, obj); + ::decode_json("user_uid_pool", user_uid_pool, obj); + RGWSystemMetaObj::decode_json(obj); JSONDecoder::decode_json("system_key", system_key, obj); JSONDecoder::decode_json("placement_pools", placement_pools, obj); + ::decode_json("metadata_heap", metadata_heap, obj); } void RGWZone::dump(Formatter *f) const -- 2.39.5