]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix bucket overwrite
authorYehuda Sadeh <yehuda@redhat.com>
Wed, 16 Nov 2016 01:14:24 +0000 (17:14 -0800)
committerYehuda Sadeh <yehuda@redhat.com>
Thu, 9 Mar 2017 17:18:52 +0000 (09:18 -0800)
got broken through the rgw_bucket cleanup related work

Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_admin.cc
src/rgw/rgw_rados.cc

index af6b7fa2c872bb3c6fd4d6a8f021e6fd615fb71d..a2a65477b96ebada3efb34baa629847d24a06b53 100644 (file)
@@ -5541,7 +5541,7 @@ next:
     cout << "old bucket instance id: " << bucket_info.bucket.bucket_id << std::endl;
     cout << "new bucket instance id: " << new_bucket_info.bucket.bucket_id << std::endl;
 
-    ret = store->init_bucket_index(new_bucket_info.bucket, new_bucket_info.num_shards);
+    ret = store->init_bucket_index(new_bucket_info, new_bucket_info.num_shards);
     if (ret < 0) {
       cerr << "ERROR: failed to init new bucket indexes: " << cpp_strerror(-ret) << std::endl;
       return -ret;
index 113c69b5ba43bf98b501c8c22014931f713cefc4..132b9469762d88062e91611438e5c26284166738 100644 (file)
@@ -5402,6 +5402,12 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
 
     ret = put_linked_bucket_info(info, exclusive, ceph::real_time(), pep_objv, &attrs, true);
     if (ret == -EEXIST) {
+      librados::IoCtx index_ctx;
+      map<int, string> bucket_objs;
+      int r = open_bucket_index(info, index_ctx, bucket_objs);
+      if (r < 0)
+        return r;
+
        /* we need to reread the info and return it, caller will have a use for it */
       RGWObjVersionTracker instance_ver = info.objv_tracker;
       info.objv_tracker.clear();
@@ -5417,13 +5423,6 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
 
       /* only remove it if it's a different bucket instance */
       if (info.bucket.bucket_id != bucket.bucket_id) {
-        /* remove bucket index */
-        librados::IoCtx index_ctx; // context for new bucket
-        map<int, string> bucket_objs;
-        int r = open_bucket_index(info, index_ctx, bucket_objs);
-        if (r < 0)
-          return r;
-
         /* remove bucket meta instance */
         string entry = bucket.get_key();
         r = rgw_bucket_instance_remove_entry(this, entry, &instance_ver);