From: Orit Wasserman Date: Sun, 1 Jan 2017 10:36:04 +0000 (+0200) Subject: radosgw-admin: realm set should create a new realm X-Git-Tag: v10.2.6~47^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3cd42f4b75c9ea9d253c276e61789d5a2b2395b4;p=ceph.git radosgw-admin: realm set should create a new realm Fixes: http://tracker.ceph.com/issues/18333 Signed-off-by: Orit Wasserman (cherry picked from commit e23339c9ef34f6b9df90b1ab64b550af9b541d9e) --- diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index a2d931483456..294d9e130b2c 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -2649,7 +2649,7 @@ int main(int argc, char **argv) cerr << "failed to list realmss: " << cpp_strerror(-ret) << std::endl; return -ret; } - formatter->open_object_section("realmss_list"); + formatter->open_object_section("realms_list"); encode_json("default_info", default_id, formatter); encode_json("realms", realms, formatter); formatter->close_section(); @@ -2712,19 +2712,33 @@ int main(int argc, char **argv) return -EINVAL; } RGWRealm realm(realm_id, realm_name); - int ret = realm.init(g_ceph_context, store, false); - if (ret < 0) { + bool new_realm = false; + int ret = realm.init(g_ceph_context, store); + if (ret < 0 && ret != -ENOENT) { cerr << "failed to init realm: " << cpp_strerror(-ret) << std::endl; return -ret; + } else if (ret == -ENOENT) { + new_realm = true; } ret = read_decode_json(infile, realm); if (ret < 0) { return 1; } - ret = realm.update(); - if (ret < 0) { - cerr << "ERROR: couldn't store realm info: " << cpp_strerror(-ret) << std::endl; - return 1; + /* new realm */ + if (new_realm) { + cout << "clearing period and epoch for new realm" << std::endl; + realm.clear_current_period_and_epoch(); + ret = realm.create(); + if (ret < 0) { + cerr << "ERROR: couldn't create new realm: " << cpp_strerror(-ret) << std::endl; + return 1; + } + } else { + ret = realm.update(); + if (ret < 0) { + cerr << "ERROR: couldn't store realm info: " << cpp_strerror(-ret) << std::endl; + return 1; + } } if (set_default) { diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index 0d3db37b5ef6..bb54b31d246b 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -1383,7 +1383,10 @@ public: return current_period; } int set_current_period(RGWPeriod& period); - + void clear_current_period_and_epoch() { + current_period.clear(); + epoch = 0; + } epoch_t get_epoch() const { return epoch; } string get_control_oid();