void RGWCreateBucket::execute()
{
RGWAccessControlPolicy old_policy(s->cct);
- map<string, bufferlist> attrs;
- bufferlist aclbl;
- bufferlist corsbl;
+ buffer::list aclbl;
+ buffer::list corsbl;
bool existed;
string bucket_name;
rgw_make_bucket_entry_name(s->bucket_tenant, s->bucket_name, bucket_name);
}
policy.encode(aclbl);
- attrs[RGW_ATTR_ACL] = aclbl;
+ emplace_attr(RGW_ATTR_ACL, std::move(aclbl));
if (has_cors) {
cors_config.encode(corsbl);
- attrs[RGW_ATTR_CORS] = corsbl;
+ emplace_attr(RGW_ATTR_CORS, std::move(corsbl));
}
s->bucket.tenant = s->bucket_tenant; /* ignored if bucket exists */
s->bucket.name = s->bucket_name;
- op_ret = store->create_bucket(*(s->user), s->bucket, zonegroup_id, placement_rule,
- swift_ver_location,
- attrs, info, pobjv, &ep_objv, creation_time,
+ op_ret = store->create_bucket(*(s->user), s->bucket, zonegroup_id,
+ placement_rule, swift_ver_location, attrs,
+ info, pobjv, &ep_objv, 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. */
bufferlist aclbl;
dest_policy.encode(aclbl);
+ emplace_attr(RGW_ATTR_ACL, std::move(aclbl));
- attrs[RGW_ATTR_ACL] = aclbl;
rgw_get_request_metadata(s->cct, s->info, attrs);
map<string, string>::iterator iter;
bool has_cors;
RGWCORSConfiguration cors_config;
string swift_ver_location;
+ map<string, buffer::list> attrs;
set<string> rmattr_names;
bufferlist in_data;
public:
RGWCreateBucket() : has_cors(false) {}
+ void emplace_attr(std::string&& key, buffer::list&& bl) {
+ attrs.emplace(key, bl); /* key and bl are r-value refs */
+ }
+
int verify_permission();
void pre_exec();
void execute();
ceph::real_time unmod_time;
ceph::real_time *mod_ptr;
ceph::real_time *unmod_ptr;
- map<string, bufferlist> attrs;
+ map<string, buffer::list> attrs;
string src_tenant_name, src_bucket_name;
rgw_bucket src_bucket;
rgw_obj_key src_object;
string& bucket_name,
rgw_obj_key& object);
+ void emplace_attr(std::string&& key, buffer::list&& bl) {
+ attrs.emplace(key, bl); /* key and bl are r-value refs */
+ }
+
virtual void init(RGWRados *store, struct req_state *s, RGWHandler *h) {
RGWOp::init(store, s, h);
dest_policy.set_ctx(s->cct);