diff options
author | Yehuda Sadeh <yehuda@inktank.com> | 2013-06-23 19:42:17 -0700 |
---|---|---|
committer | Yehuda Sadeh <yehuda@inktank.com> | 2013-06-23 19:42:17 -0700 |
commit | 00973dfdcab54e51a7cfcf09990f31849239e2a7 (patch) | |
tree | a8d969106a2715b36796441c5f797495d47b9af8 | |
parent | dab57ef883a882fc5a481f1aa561df8718f148f6 (diff) | |
download | ceph-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.cc | 2 | ||||
-rw-r--r-- | src/rgw/rgw_op.cc | 4 | ||||
-rw-r--r-- | src/rgw/rgw_op.h | 1 | ||||
-rw-r--r-- | src/rgw/rgw_rados.cc | 22 | ||||
-rw-r--r-- | src/rgw/rgw_rados.h | 5 | ||||
-rw-r--r-- | src/rgw/rgw_rest_s3.cc | 2 |
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); |