]> 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)
committerNathan Cutler <ncutler@suse.com>
Mon, 19 Jun 2017 17:08:32 +0000 (19:08 +0200)
Fixes: http://tracker.ceph.com/issues/18333
Signed-off-by: Orit Wasserman <owasserm@redhat.com>
(cherry picked from commit e23339c9ef34f6b9df90b1ab64b550af9b541d9e)

src/rgw/rgw_admin.cc
src/rgw/rgw_rados.h

index d1ad3467e9f181942e3e42aadbd6573a876195fc..195fef06d87b48cad17c97d582979e573bd7e2ce 100644 (file)
@@ -3045,7 +3045,7 @@ int main(int argc, char **argv)
          cerr << "failed to list realms: " << 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 c44cd12c67bd4220ac61d2dbfa3557500aeabad9..9d820ff7f00dcc45cab4b08abeddb427e2f6b022 100644 (file)
@@ -1503,7 +1503,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();