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();
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) {
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();