From: Yehuda Sadeh Date: Wed, 16 Nov 2016 01:14:24 +0000 (-0800) Subject: rgw: fix bucket overwrite X-Git-Tag: v12.0.1~111^2~19 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2ae6f6cab6b2192f3b6f9d07db7d6dcb83103177;p=ceph.git rgw: fix bucket overwrite got broken through the rgw_bucket cleanup related work Signed-off-by: Yehuda Sadeh --- diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index af6b7fa2c872b..a2a65477b96eb 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -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; diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 113c69b5ba43b..132b9469762d8 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -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 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 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);