int rgw_bucket_set_attrs(RGWRados *store, RGWBucketInfo& bucket_info,
map<string, bufferlist>& attrs,
- map<string, bufferlist>* rmattrs,
RGWObjVersionTracker *objv_tracker)
{
rgw_bucket& bucket = bucket_info.bucket;
string key;
store->get_bucket_instance_entry(bucket, key); /* we want the bucket instance name without
the oid prefix cruft */
- return store->meta_mgr->set_attrs(bucket_instance_meta_handler, key,
- obj, attrs, rmattrs, objv_tracker);
+ bufferlist bl;
+
+ ::encode(bucket_info, bl);
+
+ return rgw_bucket_instance_store_info(store, key, bl, false, &attrs, objv_tracker, 0);
}
static void dump_mulipart_index_results(list<rgw_obj_key>& objs_to_unlink,
extern int rgw_bucket_set_attrs(RGWRados *store, RGWBucketInfo& bucket_info,
map<string, bufferlist>& attrs,
- map<string, bufferlist>* rmattrs,
RGWObjVersionTracker *objv_tracker);
extern void check_bad_user_bucket_mapping(RGWRados *store, const rgw_user& user_id, bool fix);
return 0;
}
-int RGWMetadataManager::set_attrs(RGWMetadataHandler *handler, string& key,
- rgw_obj& obj, map<string, bufferlist>& attrs,
- map<string, bufferlist>* rmattrs,
- RGWObjVersionTracker *objv_tracker)
-{
- string section;
- RGWMetadataLogData log_data;
- int ret = pre_modify(handler, section, key, log_data, objv_tracker, MDLOG_STATUS_SETATTRS);
- if (ret < 0)
- return ret;
-
- ret = store->system_obj_set_attrs(NULL, obj, attrs, rmattrs, objv_tracker);
- /* cascading ret into post_modify() */
-
- ret = post_modify(handler, section, key, log_data, objv_tracker, ret);
- if (ret < 0)
- return ret;
-
- return 0;
-}
int put_entry(RGWMetadataHandler *handler, const string& key, bufferlist& bl, bool exclusive,
RGWObjVersionTracker *objv_tracker, time_t mtime, map<string, bufferlist> *pattrs = NULL);
int remove_entry(RGWMetadataHandler *handler, string& key, RGWObjVersionTracker *objv_tracker);
- int set_attr(RGWMetadataHandler *handler, string& key, rgw_obj& obj, string& attr, bufferlist& bl,
- RGWObjVersionTracker *objv_tracker);
- int set_attrs(RGWMetadataHandler *handler, string& key,
- rgw_obj& obj, map<string, bufferlist>& attrs,
- map<string, bufferlist>* rmattrs,
- RGWObjVersionTracker *objv_tracker);
int get(string& metadata_key, Formatter *f);
int put(string& metadata_key, bufferlist& bl,
RGWMetadataHandler::sync_type_t sync_mode,
}
rgw_get_request_metadata(s->cct, s->info, attrs, false);
- rgw_get_user_attrs_by_uid(store, s->user.user_id, orig_attrs, &acct_op_tracker);
- prepare_add_del_attrs(orig_attrs, rmattr_names, attrs, rmattrs);
+ RGWUserInfo orig_uinfo;
+ rgw_get_user_info_by_uid(store, s->user.user_id, orig_uinfo, &acct_op_tracker);
populate_with_generic_attrs(s, attrs);
/* Handle the TempURL-related stuff. */
}
/* XXX tenant needed? */
- op_ret = rgw_store_user_attrs(store, s->user.user_id.id, attrs, &rmattrs,
- &acct_op_tracker);
+ op_ret = rgw_store_user_info(store, s->user, &orig_uinfo,
+ &acct_op_tracker, 0, false, &attrs);
if (op_ret < 0) {
return;
}
attrs[RGW_ATTR_CORS] = bl;
}
- op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &rmattrs,
- &s->bucket_info.objv_tracker);
+ op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker);
}
int RGWPutMetadataObject::verify_permission()
op_ret = get_obj_attrs(store, s, obj, attrs);
if (op_ret < 0)
return;
- }
- attrs[RGW_ATTR_ACL] = bl;
-
- if (!s->object.empty()) {
+ attrs[RGW_ATTR_ACL] = bl;
op_ret = store->set_attrs(s->obj_ctx, obj, attrs, NULL);
} else {
- op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, NULL, &s->bucket_info.objv_tracker);
+ attrs = s->bucket_attrs;
+ attrs[RGW_ATTR_ACL] = bl;
+ op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker);
}
}
store->set_atomic(s->obj_ctx, obj);
op_ret = store->set_attr(s->obj_ctx, obj, RGW_ATTR_CORS, cors_bl);
} else {
- map<string, bufferlist> attrs;
+ map<string, bufferlist> attrs = s->bucket_attrs;
attrs[RGW_ATTR_CORS] = cors_bl;
- op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, NULL, &s->bucket_info.objv_tracker);
+ op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker);
}
}
if (is_object_op) {
op_ret = store->set_attrs(s->obj_ctx, obj, attrs, &rmattrs);
} else {
- op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &rmattrs, &s->bucket_info.objv_tracker);
+ op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker);
}
}
if (!(flags & PUT_OBJ_CREATE))
return -EINVAL;
op.create(true); // exclusive create
+ } else {
+ op.remove();
+ op.set_op_flags2(LIBRADOS_OP_FLAG_FAILOK);
+ op.create(false);
}
if (objv_tracker) {
return ret;
}
-int rgw_store_user_attrs(RGWRados *const store,
- string& user_id,
- map<string, bufferlist>& attrs,
- map<string, bufferlist>* const rmattrs,
- RGWObjVersionTracker * const objv_tracker)
-{
- rgw_obj obj(store->zone.user_uid_pool, user_id);
-
- return store->meta_mgr->set_attrs(user_meta_handler, user_id, obj,
- attrs, rmattrs, objv_tracker);
-}
-
struct user_info_entry {
RGWUserInfo info;
RGWObjVersionTracker objv_tracker;
time_t mtime,
bool exclusive,
map<string, bufferlist> *pattrs = NULL);
-/**
- * Save the custom user metadata given in @attrs and delete those in @rmattrs
- * for user specified in @user_id.
- * Returns: 0 on success, -ERR# on failure.
- */
-extern int rgw_store_user_attrs(RGWRados *store,
- string& user_id,
- map<string, bufferlist>& attrs,
- map<string, bufferlist>* rmattrs,
- RGWObjVersionTracker *objv_tracker);
/**
* Given an user_id, finds the user info associated with it.