int RGWLibIO::set_uid(RGWRados *store, const rgw_user& uid)
{
- int ret = store->ctl.user->get_info_by_uid(uid, &user_info);
+ int ret = store->ctl.user->get_info_by_uid(uid, &user_info, null_yield);
if (ret < 0) {
derr << "ERROR: failed reading user info: uid=" << uid << " ret="
<< ret << dendl;
string id_val = rgw_trim_quotes(id_val_quoted);
if (strcasecmp(id_type.c_str(), "emailAddress") == 0) {
- ret = user_ctl->get_info_by_email(id_val, &info);
+ ret = user_ctl->get_info_by_email(id_val, &info, null_yield);
if (ret < 0)
return ret;
grant.set_canon(info.user_id, info.display_name, rgw_perm);
} else if (strcasecmp(id_type.c_str(), "id") == 0) {
rgw_user user(id_val);
- ret = user_ctl->get_info_by_uid(user, &info);
+ ret = user_ctl->get_info_by_uid(user, &info, null_yield);
if (ret < 0)
return ret;
}
RGWUserInfo owner_info;
- if (user_ctl->get_info_by_uid(owner->get_id(), &owner_info) < 0) {
+ if (user_ctl->get_info_by_uid(owner->get_id(), &owner_info, null_yield) < 0) {
ldout(cct, 10) << "owner info does not exist" << dendl;
return -EINVAL;
}
}
email = u.id;
ldout(cct, 10) << "grant user email=" << email << dendl;
- if (user_ctl->get_info_by_email(email, &grant_user) < 0) {
+ if (user_ctl->get_info_by_email(email, &grant_user, null_yield) < 0) {
ldout(cct, 10) << "grant user email not found or other error" << dendl;
return -ERR_UNRESOLVABLE_EMAIL;
}
}
}
- if (grant_user.user_id.empty() && user_ctl->get_info_by_uid(uid, &grant_user) < 0) {
+ if (grant_user.user_id.empty() && user_ctl->get_info_by_uid(uid, &grant_user, null_yield) < 0) {
ldout(cct, 10) << "grant user does not exist:" << uid << dendl;
return -EINVAL;
} else {
RGWUserInfo grant_user;
ACLGrant grant;
- if (user_ctl->get_info_by_uid(user, &grant_user) < 0) {
+ if (user_ctl->get_info_by_uid(user, &grant_user, null_yield) < 0) {
ldout(cct, 10) << "grant user does not exist: " << uid << dendl;
/* skipping silently */
grant.set_canon(user, std::string(), perm);
} else {
rgw_user user(uid);
- if (user_ctl->get_info_by_uid(user, &grant_user) < 0) {
+ if (user_ctl->get_info_by_uid(user, &grant_user, null_yield) < 0) {
ldout(cct, 10) << "grant user does not exist:" << uid << dendl;
/* skipping silently */
grant.set_canon(user, std::string(), perm);
rgw_apply_default_bucket_quota(user_info.bucket_quota, cct->_conf);
rgw_apply_default_user_quota(user_info.user_quota, cct->_conf);
- int ret = ctl->user->store_info(user_info, RGWUserCtl::PutParams()
- .set_exclusive(true));
+ int ret = ctl->user->store_info(user_info, null_yield,
+ RGWUserCtl::PutParams().set_exclusive(true));
if (ret < 0) {
ldpp_dout(dpp, 0) << "ERROR: failed to store new user info: user="
<< user_info.user_id << " ret=" << ret << dendl;
if (acct_user.tenant.empty()) {
const rgw_user tenanted_uid(acct_user.id, acct_user.id);
- if (ctl->user->get_info_by_uid( tenanted_uid, &user_info) >= 0) {
+ if (ctl->user->get_info_by_uid(tenanted_uid, &user_info, null_yield) >= 0) {
/* Succeeded. */
return;
}
}
- if (ctl->user->get_info_by_uid( acct_user, &user_info) < 0) {
+ if (ctl->user->get_info_by_uid(acct_user, &user_info, null_yield) < 0) {
ldpp_dout(dpp, 0) << "NOTICE: couldn't map swift user " << acct_user << dendl;
create_account(dpp, acct_user, user_info);
}
if (acct_user_override.tenant.empty()) {
const rgw_user tenanted_uid(acct_user_override.id, acct_user_override.id);
- if (ctl->user->get_info_by_uid(tenanted_uid, &user_info) >= 0) {
+ if (ctl->user->get_info_by_uid(tenanted_uid, &user_info, null_yield) >= 0) {
/* Succeeded. */
return;
}
}
- const int ret = ctl->user->get_info_by_uid(acct_user_override, &user_info);
+ const int ret = ctl->user->get_info_by_uid(acct_user_override, &user_info, null_yield);
if (ret < 0) {
/* We aren't trying to recover from ENOENT here. It's supposed that creating
* someone else's account isn't a thing we want to support in this filter. */
* reasons. rgw_get_user_info_by_uid doesn't trigger the operator=() but
* calls ::decode instead. */
RGWUserInfo euser_info;
- if (ctl->user->get_info_by_uid(effective_uid, &euser_info) < 0) {
+ if (ctl->user->get_info_by_uid(effective_uid, &euser_info, null_yield) < 0) {
//ldpp_dout(dpp, 0) << "User lookup failed!" << dendl;
throw -EACCES;
}
}
if (!user_id.empty()) {
- int r = store->ctl.user->get_info_by_uid(user_id, &user_info);
+ int r = store->ctl.user->get_info_by_uid(user_id, &user_info, null_yield);
if (r < 0)
return r;
template<>
int RGWGetUserInfoCR::Request::_send_request()
{
- return store->ctl.user->get_info_by_uid(params.user, result.get(), nullopt);
+ return store->ctl.user->get_info_by_uid(params.user, result.get(), null_yield);
}
template<>
}
int authorize(RGWRados* store) {
- int ret = store->ctl.user->get_info_by_access_key(key.id, &user);
+ int ret = store->ctl.user->get_info_by_access_key(key.id, &user, null_yield);
if (ret == 0) {
RGWAccessKey* k = user.get_key(key.id);
if (!k || (k->key != key.key))
}
if (token.valid() && (ldh->auth(token.id, token.key) == 0)) {
/* try to store user if it doesn't already exist */
- if (store->ctl.user->get_info_by_uid(token.id, &user) < 0) {
- int ret = rgw_store_user_info(store->ctl.user, user, NULL, NULL, real_time(),
- true);
+ if (store->ctl.user->get_info_by_uid(token.id, &user, null_yield) < 0) {
+ int ret = store->ctl.user->store_info(user, null_yield,
+ RGWUserCtl::PutParams()
+ .set_exclusive(true));
if (ret < 0) {
lsubdout(get_context(), rgw, 10)
<< "NOTICE: failed to store new user's info: ret=" << ret
void update_user() {
RGWUserInfo _user = user;
auto user_ctl = rgwlib.get_store()->ctl.user;
- int ret = user_ctl->get_info_by_access_key(key.id, &user);
+ int ret = user_ctl->get_info_by_access_key(key.id, &user, null_yield);
if (ret != 0)
user = _user;
}
rgw_user uid(uid_str);
RGWUserInfo user_info;
- int ret = env.store->ctl.user->get_info_by_uid(uid, &user_info);
+ int ret = env.store->ctl.user->get_info_by_uid(uid, &user_info, null_yield);
if (ret < 0) {
derr << "ERROR: failed reading user info: uid=" << uid << " ret="
<< ret << dendl;
ldout(cct, 0) << "WARNING: couldn't find acl header for bucket, generating default" << dendl;
RGWUserInfo uinfo;
/* object exists, but policy is broken */
- int r = rgw_get_user_info_by_uid(user_ctl, bucket_info.owner, uinfo);
+ int r = user_ctl->get_info_by_uid(bucket_info.owner, &uinfo, null_yield);
if (r < 0)
return r;
RGWRados::Object op_target(store, bucket_info, obj_ctx, obj);
RGWRados::Object::Read rop(&op_target);
- ret = rop.get_attr(RGW_ATTR_ACL, bl, null_yield);
+ ret = rop.get_attr(RGW_ATTR_ACL, bl, y);
if (ret >= 0) {
ret = decode_policy(cct, bl, policy);
if (ret < 0)
/* object exists, but policy is broken */
ldout(cct, 0) << "WARNING: couldn't find acl header for object, generating default" << dendl;
RGWUserInfo uinfo;
- ret = store->ctl.user->get_info_by_uid(bucket_info.owner, &uinfo);
+ ret = store->ctl.user->get_info_by_uid(bucket_info.owner, &uinfo, y);
if (ret < 0)
return ret;
if (s->user->user_id == s->bucket_owner.get_id()) {
uinfo = s->user;
} else {
- int r = store->ctl.user->get_info_by_uid(s->bucket_info.owner, &owner_info);
+ int r = store->ctl.user->get_info_by_uid(s->bucket_info.owner, &owner_info, s->yield);
if (r < 0)
return r;
uinfo = &owner_info;
{
/* Params have been extracted earlier. See init_processing(). */
RGWUserInfo new_uinfo;
- op_ret = store->ctl.user->get_info_by_uid(s->user->user_id, &new_uinfo,
+ op_ret = store->ctl.user->get_info_by_uid(s->user->user_id, &new_uinfo, s->yield,
RGWUserCtl::GetParams()
.set_objv_tracker(&acct_op_tracker));
if (op_ret < 0) {
/* We are passing here the current (old) user info to allow the function
* optimize-out some operations. */
- op_ret = store->ctl.user->store_info(new_uinfo, RGWUserCtl::PutParams()
- .set_old_info(s->user)
- .set_objv_tracker(&acct_op_tracker)
- .set_attrs(&attrs));
+ op_ret = store->ctl.user->store_info(new_uinfo, s->yield,
+ RGWUserCtl::PutParams()
+ .set_old_info(s->user)
+ .set_objv_tracker(&acct_op_tracker)
+ .set_attrs(&attrs));
}
int RGWPutMetadataBucket::verify_permission()
if (uid.tenant.empty()) {
const rgw_user tenanted_uid(uid.id, uid.id);
- if (user_ctl->get_info_by_uid(tenanted_uid, &uinfo) >= 0) {
+ if (user_ctl->get_info_by_uid(tenanted_uid, &uinfo, s->yield) >= 0) {
/* Succeeded. */
bucket_tenant = uinfo.user_id.tenant;
found = true;
}
}
- if (!found && user_ctl->get_info_by_uid(uid, &uinfo) < 0) {
+ if (!found && user_ctl->get_info_by_uid(uid, &uinfo, s->yield) < 0) {
throw -EPERM;
} else {
bucket_tenant = uinfo.user_id.tenant;
ldpp_dout(this, 20) << "temp url user (bucket owner): " << bucket_info.owner
<< dendl;
- if (user_ctl->get_info_by_uid(bucket_info.owner, &owner_info) < 0) {
+ if (user_ctl->get_info_by_uid(bucket_info.owner, &owner_info, s->yield) < 0) {
throw -EPERM;
}
}
RGWUserInfo info;
rgw_user user_id(user_name);
- op_ret = rgw_get_user_info_by_uid(store->ctl.user, user_id, info);
+ op_ret = store->ctl.user->get_info_by_uid(user_id, &info, s->yield);
if (op_ret < 0) {
op_ret = -ERR_NO_SUCH_ENTITY;
return;
uattrs[RGW_ATTR_USER_POLICY] = in_bl;
RGWObjVersionTracker objv_tracker;
- op_ret = rgw_store_user_info(store->ctl.user, info, &info, &objv_tracker, real_time(), false, &uattrs);
+ op_ret = store->ctl.user->store_info(info, s->yield,
+ RGWUserCtl::PutParams()
+ .set_objv_tracker(&objv_tracker)
+ .set_attrs(&uattrs));
if (op_ret < 0) {
op_ret = -ERR_INTERNAL_ERROR;
}
}
RGWUserInfo info;
+ map<string, bufferlist> uattrs;
rgw_user user_id(user_name);
- op_ret = store->ctl.user->get_info_by_uid(user_id, &info);
+ op_ret = store->ctl.user->get_info_by_uid(user_id, &info, s->yield,
+ RGWUserCtl::GetParams()
+ .set_attrs(&uattrs));
if (op_ret < 0) {
op_ret = -ERR_NO_SUCH_ENTITY;
return;
}
- map<string, bufferlist> uattrs;
- op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs, s->yield);
- if (op_ret == -ENOENT) {
- op_ret = -ERR_NO_SUCH_ENTITY;
- return;
- }
-
map<string, string> policies;
if (auto it = uattrs.find(RGW_ATTR_USER_POLICY); it != uattrs.end()) {
bufferlist out_bl = uattrs[RGW_ATTR_USER_POLICY];
uattrs[RGW_ATTR_USER_POLICY] = in_bl;
RGWObjVersionTracker objv_tracker;
- op_ret = store->ctl.user->store_info(info, RGWUserCtl::PutParams()
- .set_old_info(&info)
- .set_objv_tracker(&objv_tracker)
- .set_attrs(&uattrs));
+ op_ret = store->ctl.user->store_info(info, s->yield,
+ RGWUserCtl::PutParams()
+ .set_old_info(&info)
+ .set_objv_tracker(&objv_tracker)
+ .set_attrs(&uattrs));
if (op_ret < 0) {
op_ret = -ERR_INTERNAL_ERROR;
}
if (uid.tenant.empty()) {
const rgw_user tenanted_uid(uid.id, uid.id);
- if (ctl->user->get_info_by_uid(tenanted_uid, &uinfo) >= 0) {
+ if (ctl->user->get_info_by_uid(tenanted_uid, &uinfo, s->yield) >= 0) {
/* Succeeded. */
bucket_tenant = uinfo.user_id.tenant;
found = true;
}
}
- if (!found && ctl->user->get_info_by_uid(uid, &uinfo) < 0) {
+ if (!found && ctl->user->get_info_by_uid(uid, &uinfo, s->yield) < 0) {
throw -EPERM;
} else {
bucket_tenant = uinfo.user_id.tenant;
ldpp_dout(dpp, 20) << "temp url user (bucket owner): " << bucket_info.owner
<< dendl;
- if (ctl->user->get_info_by_uid(bucket_info.owner, &owner_info) < 0) {
+ if (ctl->user->get_info_by_uid(bucket_info.owner, &owner_info, s->yield) < 0) {
throw -EPERM;
}
}
ldpp_dout(dpp, 10) << "swift user=" << swift_user << dendl;
RGWUserInfo tmp_uinfo;
- ret = ctl->user->get_info_by_swift(swift_user, &tmp_uinfo);
+ ret = ctl->user->get_info_by_swift(swift_user, &tmp_uinfo, s->yield);
if (ret < 0) {
ldpp_dout(dpp, 0) << "NOTICE: couldn't map swift user" << dendl;
throw ret;
}
RGWUserInfo user_info;
- ret = ctl->user->get_info_by_swift(swift_user, &user_info);
+ ret = ctl->user->get_info_by_swift(swift_user, &user_info, s->yield);
if (ret < 0) {
throw ret;
}
user_str = user;
- if ((ret = store->ctl.user->get_info_by_swift(user_str, &info)) < 0)
+ if ((ret = store->ctl.user->get_info_by_swift(user_str, &info, s->yield)) < 0)
{
ret = -EACCES;
goto done;
bool exclusive,
map<string, bufferlist> *pattrs)
{
- return user_ctl->store_info(info, RGWUserCtl::PutParams()
- .set_old_info(old_info)
- .set_objv_tracker(objv_tracker)
- .set_mtime(mtime)
- .set_exclusive(exclusive)
- .set_attrs(pattrs)
- .set_yield(null_yield));
+ return user_ctl->store_info(info, null_yield,
+ RGWUserCtl::PutParams()
+ .set_old_info(old_info)
+ .set_objv_tracker(objv_tracker)
+ .set_mtime(mtime)
+ .set_exclusive(exclusive)
+ .set_attrs(pattrs));
}
/**
rgw_cache_entry_info * const cache_info,
map<string, bufferlist> * const pattrs)
{
- return user_ctl->get_info_by_uid(uid, &info, RGWUserCtl::GetParams()
- .set_objv_tracker(objv_tracker)
- .set_mtime(pmtime)
- .set_cache_info(cache_info)
- .set_attrs(pattrs)
- .set_yield(null_yield));
+ return user_ctl->get_info_by_uid(uid, &info, null_yield,
+ RGWUserCtl::GetParams()
+ .set_objv_tracker(objv_tracker)
+ .set_mtime(pmtime)
+ .set_cache_info(cache_info)
+ .set_attrs(pattrs));
}
/**
int rgw_get_user_info_by_email(RGWUserCtl *user_ctl, string& email, RGWUserInfo& info,
RGWObjVersionTracker *objv_tracker, real_time *pmtime)
{
- return user_ctl->get_info_by_email(email, &info, RGWUserCtl::GetParams()
- .set_objv_tracker(objv_tracker)
- .set_mtime(pmtime)
- .set_yield(null_yield));
+ return user_ctl->get_info_by_email(email, &info, null_yield,
+ RGWUserCtl::GetParams()
+ .set_objv_tracker(objv_tracker)
+ .set_mtime(pmtime));
}
/**
RGWObjVersionTracker * const objv_tracker,
real_time * const pmtime)
{
- return user_ctl->get_info_by_swift(swift_name, &info, RGWUserCtl::GetParams()
- .set_objv_tracker(objv_tracker)
- .set_mtime(pmtime)
- .set_yield(null_yield));
+ return user_ctl->get_info_by_swift(swift_name, &info, null_yield,
+ RGWUserCtl::GetParams()
+ .set_objv_tracker(objv_tracker)
+ .set_mtime(pmtime));
}
/**
RGWObjVersionTracker* objv_tracker,
real_time *pmtime)
{
- return user_ctl->get_info_by_access_key(access_key, &info, RGWUserCtl::GetParams()
- .set_objv_tracker(objv_tracker)
- .set_mtime(pmtime)
- .set_yield(null_yield));
+ return user_ctl->get_info_by_access_key(access_key, &info, null_yield,
+ RGWUserCtl::GetParams()
+ .set_objv_tracker(objv_tracker)
+ .set_mtime(pmtime));
}
static bool char_is_unreserved_url(char c)
} while (is_truncated);
- ret = user_ctl->remove_info(user_info, RGWUserCtl::RemoveParams()
- .set_objv_tracker(&op_state.objv));
+ ret = user_ctl->remove_info(user_info, y, RGWUserCtl::RemoveParams()
+ .set_objv_tracker(&op_state.objv));
if (ret < 0) {
set_err_msg(err_msg, "unable to remove user from RADOS");
return ret;
int RGWUserCtl::get_info_by_uid(const rgw_user& uid,
RGWUserInfo *info,
+ optional_yield y,
ceph::optional_ref_default<GetParams> params)
{
params->mtime,
params->cache_info,
params->attrs,
- params->y);
+ y);
});
}
-int RGWUserCtl::get_info_by_email(const string& email, RGWUserInfo *info,
+int RGWUserCtl::get_info_by_email(const string& email,
+ RGWUserInfo *info,
+ optional_yield y,
ceph::optional_ref_default<GetParams> params)
{
return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
info,
params->objv_tracker,
params->mtime,
- params->y);
+ y);
});
}
int RGWUserCtl::get_info_by_swift(const string& swift_name,
RGWUserInfo *info,
+ optional_yield y,
ceph::optional_ref_default<GetParams> params)
{
return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
info,
params->objv_tracker,
params->mtime,
- params->y);
+ y);
});
}
int RGWUserCtl::get_info_by_access_key(const string& access_key,
RGWUserInfo *info,
+ optional_yield y,
ceph::optional_ref_default<GetParams> params)
{
return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
info,
params->objv_tracker,
params->mtime,
- params->y);
+ y);
});
}
{
RGWUserInfo user_info;
- return get_info_by_uid(user_id, &user_info, RGWUserCtl::GetParams()
+ return get_info_by_uid(user_id, &user_info, y, RGWUserCtl::GetParams()
.set_attrs(pattrs)
- .set_yield(y)
.set_objv_tracker(objv_tracker));
}
-int RGWUserCtl::store_info(const RGWUserInfo& info, ceph::optional_ref_default<PutParams> params)
+int RGWUserCtl::store_info(const RGWUserInfo& info, optional_yield y,
+ ceph::optional_ref_default<PutParams> params)
{
string key = RGWSI_User::get_meta_key(info.user_id);
params->mtime,
params->exclusive,
params->attrs,
- params->y);
+ y);
});
}
-int RGWUserCtl::remove_info(const RGWUserInfo& info, ceph::optional_ref_default<RemoveParams> params)
+int RGWUserCtl::remove_info(const RGWUserInfo& info, optional_yield y,
+ ceph::optional_ref_default<RemoveParams> params)
{
string key = RGWSI_User::get_meta_key(info.user_id);
return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
return svc.user->remove_user_info(op->ctx(), info,
params->objv_tracker,
- params->y);
+ y);
});
}
ceph::real_time *mtime{nullptr};
rgw_cache_entry_info *cache_info{nullptr};
map<string, bufferlist> *attrs{nullptr};
- optional_yield y{null_yield};
GetParams& set_objv_tracker(RGWObjVersionTracker *_objv_tracker) {
objv_tracker = _objv_tracker;
attrs = _attrs;
return *this;
}
-
- GetParams& set_yield(optional_yield _y) {
- y = _y;
- return *this;
- }
};
struct PutParams {
ceph::real_time mtime;
bool exclusive{false};
map<string, bufferlist> *attrs;
- optional_yield y{null_yield};
PutParams& set_old_info(RGWUserInfo *_info) {
old_info = _info;
attrs = _attrs;
return *this;
}
-
- PutParams& set_yield(optional_yield _y) {
- y = _y;
- return *this;
- }
};
struct RemoveParams {
RGWObjVersionTracker *objv_tracker{nullptr};
- optional_yield y{null_yield};
RemoveParams& set_objv_tracker(RGWObjVersionTracker *_objv_tracker) {
objv_tracker = _objv_tracker;
return *this;
}
- RemoveParams& set_yield(optional_yield _y) {
- y = _y;
- return *this;
- }
};
- int get_info_by_uid(const rgw_user& uid, RGWUserInfo *info, ceph::optional_ref_default<GetParams> params = std::nullopt);
- int get_info_by_email(const string& email, RGWUserInfo *info, ceph::optional_ref_default<GetParams> params = std::nullopt);
- int get_info_by_swift(const string& swift_name, RGWUserInfo *info, ceph::optional_ref_default<GetParams> params = std::nullopt);
- int get_info_by_access_key(const string& access_key, RGWUserInfo *info, ceph::optional_ref_default<GetParams> params = std::nullopt);
+ int get_info_by_uid(const rgw_user& uid, RGWUserInfo *info, optional_yield y,
+ ceph::optional_ref_default<GetParams> params = std::nullopt);
+ int get_info_by_email(const string& email, RGWUserInfo *info, optional_yield y,
+ ceph::optional_ref_default<GetParams> params = std::nullopt);
+ int get_info_by_swift(const string& swift_name, RGWUserInfo *info, optional_yield y,
+ ceph::optional_ref_default<GetParams> params = std::nullopt);
+ int get_info_by_access_key(const string& access_key, RGWUserInfo *info, optional_yield y,
+ ceph::optional_ref_default<GetParams> params = std::nullopt);
int get_attrs_by_uid(const rgw_user& user_id,
map<string, bufferlist> *attrs,
optional_yield y,
RGWObjVersionTracker *objv_tracker = nullptr);
- int store_info(const RGWUserInfo& info, ceph::optional_ref_default<PutParams> params);
- int remove_info(const RGWUserInfo& info, ceph::optional_ref_default<RemoveParams> params);
+ int store_info(const RGWUserInfo& info, optional_yield y,
+ ceph::optional_ref_default<PutParams> params);
+ int remove_info(const RGWUserInfo& info, optional_yield y,
+ ceph::optional_ref_default<RemoveParams> params);
int add_bucket(const rgw_user& user,
const rgw_bucket& bucket,