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;
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 */
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;
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);
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;
return r;
}
}
- if (pinfo)
- *pinfo = info;
return ret;
}
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;
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;
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;
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;
}
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);
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);