]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
radosgw-admin: realm set should create a new realm
authorOrit Wasserman <owasserm@redhat.com>
Sun, 1 Jan 2017 10:36:04 +0000 (12:36 +0200)
committerOrit Wasserman <owasserm@redhat.com>
Sun, 8 Jan 2017 10:15:27 +0000 (12:15 +0200)
Fixes: http://tracker.ceph.com/issues/18333
Signed-off-by: Orit Wasserman <owasserm@redhat.com>
src/rgw/rgw_admin.cc
src/rgw/rgw_rados.h

index 6e0753da2e19aba3d767dcd8c1ac5d2a3e353c41..c44d0220d7f59c66be22124adc8ce8d8a6bd6fc1 100644 (file)
@@ -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) {
index 32856a20aaea8b08a670815eea743f7e18302078..38169e780bb14ea8680342a520cbb1d7e77c3a2f 100644 (file)
@@ -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();