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: v12.0.0~252^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e23339c9ef34f6b9df90b1ab64b550af9b541d9e;p=ceph.git radosgw-admin: realm set should create a new realm Fixes: http://tracker.ceph.com/issues/18333 Signed-off-by: Orit Wasserman --- diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 6e0753da2e19..c44d0220d7f5 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -3045,7 +3045,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(); @@ -3108,19 +3108,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 32856a20aaea..38169e780bb1 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -1502,7 +1502,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();