/* we need to make sure we read bucket info, it's not read before for this
* specific request */
- op_ret = store->get_bucket(s->user, s->bucket_tenant, bucket_name, &s->bucket);
+ std::unique_ptr<rgw::sal::RGWBucket> bucket;
+ RGWBucketInfo binfo;
+ op_ret = store->get_bucket(s->user, s->bucket_tenant, bucket_name, &bucket);
if (op_ret < 0 && op_ret != -ENOENT) {
return op_ret;
}
if (bucket_exists) {
RGWAccessControlPolicy old_policy(s->cct);
- int r = rgw_op_get_bucket_policy_from_attr(s->cct, store, s->bucket->get_info(),
- s->bucket->get_attrs().attrs, &old_policy);
+ binfo = bucket->get_info();
+ int r = rgw_op_get_bucket_policy_from_attr(s->cct, store, binfo,
+ bucket->get_attrs().attrs, &old_policy);
if (r >= 0) {
if (old_policy.get_owner().get_id().compare(s->user->get_user()) != 0) {
op_ret = -EEXIST;
pmaster_num_shards = nullptr;
}
- rgw_placement_rule placement_rule(s->bucket->get_placement_rule(), s->info.storage_class);
+ rgw_placement_rule placement_rule(binfo.placement_rule, s->info.storage_class);
if (bucket_exists) {
rgw_placement_rule selected_placement_rule;
- rgw_bucket bucket;
- bucket.tenant = s->bucket_tenant;
- bucket.name = s->bucket_name;
+ rgw_bucket new_bucket;
+ new_bucket.tenant = s->bucket_tenant;
+ new_bucket.name = s->bucket_name;
op_ret = store->svc()->zone->select_bucket_placement(s->user->get_info(),
store->svc()->zone->get_zonegroup().get_id(),
placement_rule,
&selected_placement_rule,
nullptr);
- if (selected_placement_rule != s->bucket->get_placement_rule()) {
+ if (selected_placement_rule != binfo.placement_rule) {
op_ret = -EEXIST;
ldpp_dout(this, 20) << "non-coherent placement rule" << dendl;
return op_ret;
RGWQuotaInfo quota_info;
const RGWQuotaInfo * pquota_info = nullptr;
- rgw_bucket bucket;
- bucket.tenant = s->bucket_tenant; /* ignored if bucket exists */
- bucket.name = bucket_name;
+ rgw_bucket new_bucket;
+ new_bucket.tenant = s->bucket_tenant; /* ignored if bucket exists */
+ new_bucket.name = bucket_name;
RGWBucketInfo out_info;
op_ret = store->getRados()->create_bucket(s->user->get_info(),
- bucket,
+ new_bucket,
store->svc()->zone->get_zonegroup().get_id(),
- placement_rule, s->bucket->get_info().swift_ver_location,
+ placement_rule, binfo.swift_ver_location,
pquota_info, attrs,
out_info, pobjv, &ep_objv, creation_time,
pmaster_bucket, pmaster_num_shards, true);
ldpp_dout(this, 20) << "conflicting bucket name" << dendl;
return op_ret;
}
- bucket = out_info.bucket;
+ new_bucket = out_info.bucket;
}
- op_ret = store->ctl()->bucket->link_bucket(s->user->get_id(), bucket,
+ op_ret = store->ctl()->bucket->link_bucket(s->user->get_id(), new_bucket,
out_info.creation_time,
s->yield, false);
if (op_ret && !existed && op_ret != -EEXIST) {
/* if it exists (or previously existed), don't remove it! */
- op_ret = store->ctl()->bucket->unlink_bucket(s->user->get_id(), bucket, s->yield);
+ op_ret = store->ctl()->bucket->unlink_bucket(s->user->get_id(), new_bucket, s->yield);
if (op_ret < 0) {
ldpp_dout(this, 0) << "WARNING: failed to unlink bucket: ret=" << op_ret << dendl;
}
return op_ret;
}
- if (s->bucket->versioning_enabled()) {
+ if (bucket->versioning_enabled()) {
obj->gen_rand_obj_instance_name();
}