summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2013-06-23 19:42:17 -0700
committerYehuda Sadeh <yehuda@inktank.com>2013-06-23 19:42:17 -0700
commit00973dfdcab54e51a7cfcf09990f31849239e2a7 (patch)
treea8d969106a2715b36796441c5f797495d47b9af8
parentdab57ef883a882fc5a481f1aa561df8718f148f6 (diff)
downloadceph-00973dfdcab54e51a7cfcf09990f31849239e2a7.tar.gz
rgw: put_bucket_info() uses objv_tracker in bucket info
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
-rw-r--r--src/rgw/rgw_bucket.cc2
-rw-r--r--src/rgw/rgw_op.cc4
-rw-r--r--src/rgw/rgw_op.h1
-rw-r--r--src/rgw/rgw_rados.cc22
-rw-r--r--src/rgw/rgw_rados.h5
-rw-r--r--src/rgw/rgw_rest_s3.cc2
6 files changed, 16 insertions, 20 deletions
diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc
index f78a0a727ce..fb92aa311d8 100644
--- a/src/rgw/rgw_bucket.cc
+++ b/src/rgw/rgw_bucket.cc
@@ -1366,7 +1366,7 @@ public:
}
#warning need to take care of different routes here
- ret = store->put_bucket_info(entry, bci.info, false, &bci.info.objv_tracker, mtime, &bci.attrs, false);
+ ret = store->put_bucket_info(entry, bci.info, false, mtime, &bci.attrs, false);
if (ret < 0)
return ret;
diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc
index 675ae92f7ff..202e438af5f 100644
--- a/src/rgw/rgw_op.cc
+++ b/src/rgw/rgw_op.cc
@@ -996,8 +996,8 @@ void RGWCreateBucket::execute()
attrs[RGW_ATTR_ACL] = aclbl;
s->bucket.name = s->bucket_name_str;
- ret = store->create_bucket(s->user, s->bucket, region_name, placement_rule, attrs, objv_tracker, pobjv,
- creation_time, pmaster_bucket, &info, true);
+ ret = store->create_bucket(s->user, s->bucket, region_name, placement_rule, attrs, info, pobjv,
+ creation_time, pmaster_bucket, true);
/* continue if EEXIST and create_bucket will fail below. this way we can recover
* from a partial create by retrying it. */
ldout(s->cct, 20) << "rgw_create_bucket returned ret=" << ret << " bucket=" << s->bucket << dendl;
diff --git a/src/rgw/rgw_op.h b/src/rgw/rgw_op.h
index 462d58440c7..fc12470c3d6 100644
--- a/src/rgw/rgw_op.h
+++ b/src/rgw/rgw_op.h
@@ -234,7 +234,6 @@ protected:
RGWAccessControlPolicy policy;
string location_constraint;
string placement_rule;
- RGWObjVersionTracker objv_tracker;
RGWBucketInfo info;
bufferlist in_data;
diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc
index 33056f52715..bf1e16d32c7 100644
--- a/src/rgw/rgw_rados.cc
+++ b/src/rgw/rgw_rados.cc
@@ -1746,11 +1746,10 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
const string& region_name,
const string& placement_rule,
map<std::string, bufferlist>& attrs,
- RGWObjVersionTracker& objv_tracker,
+ RGWBucketInfo& info,
obj_version *pobjv,
time_t creation_time,
rgw_bucket *pmaster_bucket,
- RGWBucketInfo *pinfo,
bool exclusive)
{
#define MAX_CREATE_RETRIES 20 /* need to bound retries */
@@ -1790,13 +1789,14 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
if (r < 0)
return r;
+ RGWObjVersionTracker& objv_tracker = info.objv_tracker;
+
if (pobjv) {
objv_tracker.write_version = *pobjv;
} else {
objv_tracker.generate_new_write_ver(cct);
}
- RGWBucketInfo info;
info.bucket = bucket;
info.owner = owner.user_id;
info.region = region_name;
@@ -1805,7 +1805,7 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
time(&info.creation_time);
else
info.creation_time = creation_time;
- ret = put_bucket_info(bucket.name, info, exclusive, &objv_tracker, 0, &attrs, true);
+ ret = put_bucket_info(bucket.name, info, exclusive, 0, &attrs, true);
if (ret == -EEXIST) {
librados::IoCtx index_ctx; // context for new bucket
int r = open_bucket_index_ctx(bucket, index_ctx);
@@ -1813,8 +1813,8 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
return r;
index_ctx.remove(dir_oid);
- /* we need to updated objv_tracker, but we don't want the old cruft there */
- r = get_bucket_info(NULL, bucket.name, info, NULL);
+ RGWBucketInfo actual_info;
+ r = get_bucket_info(NULL, bucket.name, actual_info, NULL);
if (r < 0) {
if (r == -ENOENT) {
continue;
@@ -1823,8 +1823,6 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
return r;
}
}
- if (pinfo)
- *pinfo = info;
return ret;
}
@@ -2837,7 +2835,7 @@ int RGWRados::set_bucket_owner(rgw_bucket& bucket, ACLOwner& owner)
info.owner = owner.get_id();
- r = put_bucket_info(bucket.name, info, false, &info.objv_tracker, 0, &attrs, false);
+ r = put_bucket_info(bucket.name, info, false, 0, &attrs, false);
if (r < 0) {
ldout(cct, 0) << "NOTICE: put_bucket_info on bucket=" << bucket.name << " returned err=" << r << dendl;
return r;
@@ -2874,7 +2872,7 @@ int RGWRados::set_buckets_enabled(vector<rgw_bucket>& buckets, bool enabled)
info.flags |= BUCKET_SUSPENDED;
}
- r = put_bucket_info(bucket.name, info, false, &info.objv_tracker, 0, &attrs, false);
+ r = put_bucket_info(bucket.name, info, false, 0, &attrs, false);
if (r < 0) {
ldout(cct, 0) << "NOTICE: put_bucket_info on bucket=" << bucket.name << " returned err=" << r << ", skipping bucket" << dendl;
ret = r;
@@ -4523,7 +4521,7 @@ int RGWRados::get_bucket_info(void *ctx, string& bucket_name, RGWBucketInfo& inf
return 0;
}
-int RGWRados::put_bucket_info(string& bucket_name, RGWBucketInfo& info, bool exclusive, RGWObjVersionTracker *objv_tracker,
+int RGWRados::put_bucket_info(string& bucket_name, RGWBucketInfo& info, bool exclusive,
time_t mtime, map<string, bufferlist> *pattrs, bool create_entry_point)
{
bufferlist bl;
@@ -4536,7 +4534,7 @@ int RGWRados::put_bucket_info(string& bucket_name, RGWBucketInfo& info, bool exc
string oid;
get_bucket_meta_oid(info.bucket, oid);
- int ret = rgw_bucket_store_info(this, oid, bl, exclusive, pattrs, objv_tracker, mtime);
+ int ret = rgw_bucket_store_info(this, oid, bl, exclusive, pattrs, &info.objv_tracker, mtime);
if (ret < 0) {
return ret;
}
diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h
index e42f79d4602..72583008587 100644
--- a/src/rgw/rgw_rados.h
+++ b/src/rgw/rgw_rados.h
@@ -967,11 +967,10 @@ public:
const string& region_name,
const string& placement_rule,
map<std::string,bufferlist>& attrs,
- RGWObjVersionTracker& objv_tracker,
+ RGWBucketInfo& bucket_info,
obj_version *pobjv,
time_t creation_time,
rgw_bucket *master_bucket,
- RGWBucketInfo *pinfo,
bool exclusive = true);
virtual int add_bucket_placement(std::string& new_pool);
virtual int remove_bucket_placement(std::string& new_pool);
@@ -1271,7 +1270,7 @@ public:
void get_bucket_meta_oid(rgw_bucket& bucket, string& oid);
virtual int get_bucket_info(void *ctx, string& bucket_name, RGWBucketInfo& info,
time_t *pmtime, map<string, bufferlist> *pattrs = NULL);
- virtual int put_bucket_info(string& bucket_name, RGWBucketInfo& info, bool exclusive, RGWObjVersionTracker *objv_tracker,
+ virtual int put_bucket_info(string& bucket_name, RGWBucketInfo& info, bool exclusive,
time_t mtime, map<string, bufferlist> *pattrs, bool create_entry_point);
int cls_rgw_init_index(librados::IoCtx& io_ctx, librados::ObjectWriteOperation& op, string& oid);
diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc
index 9442278f080..6e482e8a251 100644
--- a/src/rgw/rgw_rest_s3.cc
+++ b/src/rgw/rgw_rest_s3.cc
@@ -449,7 +449,7 @@ void RGWCreateBucket_ObjStore_S3::send_response()
JSONFormatter f; /* use json formatter for system requests output */
f.open_object_section("info");
- encode_json("object_ver", objv_tracker.read_version, &f);
+ encode_json("object_ver", info.objv_tracker.read_version, &f);
encode_json("bucket_info", info, &f);
f.close_section();
rgw_flush_formatter_and_reset(s, &f);