rgw_env.set("HTTP_HOST", "");
/* XXX and -then- bloat up req_state with string copies from it */
- struct req_state rstate(req->cct, &rgw_env, req->get_user(), req->id);
- struct req_state *s = &rstate;
+ struct req_state *s = req->get_state();
// XXX fix this
s->cio = io;
}
-req_state::req_state(CephContext* _cct, RGWEnv* e, rgw::sal::RGWUser* u, uint64_t id)
- : cct(_cct), user(u),
- info(_cct, e), id(id)
+req_state::req_state(CephContext* _cct, RGWEnv* e, uint64_t id)
+ : cct(_cct), info(_cct, e), id(id)
{
enable_ops_log = e->get_enable_ops_log();
enable_usage_log = e->get_enable_usage_log();
bool has_bad_meta{false};
- rgw::sal::RGWUser* user{nullptr};
+ std::unique_ptr<rgw::sal::RGWUser> user;
struct {
/* TODO(rzarzynski): switch out to the static_ptr for both members. */
//token claims from STS token for ops log (can be used for Keystone token also)
std::vector<string> token_claims;
- req_state(CephContext* _cct, RGWEnv* e, rgw::sal::RGWUser* u, uint64_t id);
+ req_state(CephContext* _cct, RGWEnv* e, uint64_t id);
~req_state();
+
+ void set_user(std::unique_ptr<rgw::sal::RGWUser>& u) { user.swap(u); }
bool is_err() const { return err.is_err(); }
// implements DoutPrefixProvider
{
LookupFHResult fhr{nullptr, 0};
std::string bucket_name{path};
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), user);
- RGWStatBucketRequest req(cct, &ruser, bucket_name, bs);
+ RGWStatBucketRequest req(cct, rgwlib.get_store()->get_user(user.user_id), bucket_name, bs);
int rc = rgwlib.get_fe()->execute_req(&req);
if ((rc == 0) &&
* object locator w/o trailing slash */
std::string obj_path = parent->format_child_name(path, false);
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), user);
for (auto ix : { 0, 1, 2 }) {
switch (ix) {
if (type == RGW_FS_TYPE_DIRECTORY)
continue;
- RGWStatObjRequest req(cct, &ruser,
+ RGWStatObjRequest req(cct, rgwlib.get_store()->get_user(user.user_id),
parent->bucket_name(), obj_path,
RGWStatObjRequest::FLAG_NONE);
int rc = rgwlib.get_fe()->execute_req(&req);
continue;
obj_path += "/";
- RGWStatObjRequest req(cct, &ruser,
+ RGWStatObjRequest req(cct, rgwlib.get_store()->get_user(user.user_id),
parent->bucket_name(), obj_path,
RGWStatObjRequest::FLAG_NONE);
int rc = rgwlib.get_fe()->execute_req(&req);
case 2:
{
std::string object_name{path};
- RGWStatLeafRequest req(cct, &ruser, parent, object_name);
+ RGWStatLeafRequest req(cct, rgwlib.get_store()->get_user(user.user_id),
+ parent, object_name);
int rc = rgwlib.get_fe()->execute_req(&req);
if ((rc == 0) &&
(req.get_ret() == 0)) {
if (rgw_fh->deleted())
return -ESTALE;
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), user);
- RGWReadRequest req(get_context(), &ruser, rgw_fh, offset, length,
- buffer);
+ RGWReadRequest req(get_context(), rgwlib.get_store()->get_user(user.user_id),
+ rgw_fh, offset, length, buffer);
int rc = rgwlib.get_fe()->execute_req(&req);
if ((rc == 0) &&
if (rgw_fh->deleted())
return -ESTALE;
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), user);
- RGWReadRequest req(get_context(), &ruser, rgw_fh, offset, length,
- buffer);
+ RGWReadRequest req(get_context(), rgwlib.get_store()->get_user(user.user_id),
+ rgw_fh, offset, length, buffer);
int rc = rgwlib.get_fe()->execute_req(&req);
if ((rc == 0) &&
/* LOCKED */
}
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), user);
if (parent->is_root()) {
/* a bucket may have an object storing Unix attributes, check
* for and delete it */
} else {
/* delete object w/key "<bucket>/" (uxattrs), if any */
string oname{"/"};
- RGWDeleteObjRequest req(cct, &ruser, bkt_fh->bucket_name(), oname);
+ RGWDeleteObjRequest req(cct, rgwlib.get_store()->get_user(user.user_id),
+ bkt_fh->bucket_name(), oname);
rc = rgwlib.get_fe()->execute_req(&req);
/* don't care if ENOENT */
unref(bkt_fh);
}
string bname{name};
- RGWDeleteBucketRequest req(cct, &ruser, bname);
+ RGWDeleteBucketRequest req(cct, rgwlib.get_store()->get_user(user.user_id), bname);
rc = rgwlib.get_fe()->execute_req(&req);
if (! rc) {
rc = req.get_ret();
}
oname += "/";
}
- RGWDeleteObjRequest req(cct, &ruser, parent->bucket_name(),
+ RGWDeleteObjRequest req(cct, rgwlib.get_store()->get_user(user.user_id), parent->bucket_name(),
oname);
rc = rgwlib.get_fe()->execute_req(&req);
if (! rc) {
/* XXX initial implementation: try-copy, and delete if copy
* succeeds */
int rc = -EINVAL;
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), user);
-
real_time t;
std::string src_name{_src_name};
switch (ix) {
case 0:
{
- RGWCopyObjRequest req(cct, &ruser, src_fh, dst_fh, src_name,
- dst_name);
+ RGWCopyObjRequest req(cct, rgwlib.get_store()->get_user(user.user_id),
+ src_fh, dst_fh, src_name, dst_name);
int rc = rgwlib.get_fe()->execute_req(&req);
if ((rc != 0) ||
((rc = req.get_ret()) != 0)) {
{
int rc, rc2;
rgw_file_handle *lfh;
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), user);
rc = rgw_lookup(get_fs(), parent->get_fh(), name, &lfh,
nullptr /* st */, 0 /* mask */,
return mkr;
}
- RGWCreateBucketRequest req(get_context(), &ruser, bname);
+ RGWCreateBucketRequest req(get_context(),
+ rgwlib.get_store()->get_user(user.user_id), bname);
/* save attrs */
req.emplace_attr(RGW_ATTR_UNIX_KEY1, std::move(ux_key));
return mkr;
}
- RGWPutObjRequest req(get_context(), &ruser, parent->bucket_name(),
- dir_name, bl);
+ RGWPutObjRequest req(get_context(), rgwlib.get_store()->get_user(user.user_id),
+ parent->bucket_name(), dir_name, bl);
/* save attrs */
req.emplace_attr(RGW_ATTR_UNIX_KEY1, std::move(ux_key));
/* create it */
buffer::list bl;
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), user);
- RGWPutObjRequest req(cct, &ruser, parent->bucket_name(), obj_name, bl);
+ RGWPutObjRequest req(cct, rgwlib.get_store()->get_user(user.user_id),
+ parent->bucket_name(), obj_name, bl);
MkObjResult mkr{nullptr, -EINVAL};
rc = rgwlib.get_fe()->execute_req(&req);
buffer::copy(link_path, strlen(link_path)));
#endif
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), user);
- RGWPutObjRequest req(get_context(), &ruser, parent->bucket_name(),
- obj_name, bl);
+ RGWPutObjRequest req(get_context(), rgwlib.get_store()->get_user(user.user_id),
+ parent->bucket_name(), obj_name, bl);
/* save attrs */
req.emplace_attr(RGW_ATTR_UNIX_KEY1, std::move(ux_key));
obj_name += "/";
}
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), user);
- RGWSetAttrsRequest req(cct, &ruser, rgw_fh->bucket_name(), obj_name);
+ RGWSetAttrsRequest req(cct, rgwlib.get_store()->get_user(user.user_id),
+ rgw_fh->bucket_name(), obj_name);
rgw_fh->create_stat(st, mask);
rgw_fh->encode_attrs(ux_key, ux_attrs);
if (rc == -ENOENT) {
/* special case: materialize placeholder dir */
buffer::list bl;
- RGWPutObjRequest req(get_context(), &ruser, rgw_fh->bucket_name(),
+ RGWPutObjRequest req(get_context(), rgwlib.get_store()->get_user(user.user_id), rgw_fh->bucket_name(),
obj_name, bl);
rgw_fh->encode_attrs(ux_key, ux_attrs); /* because std::moved */
<< " update old versioned fh : " << obj_name
<< dendl;
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), user);
- RGWSetAttrsRequest req(cct, &ruser, rgw_fh->bucket_name(), obj_name);
+ RGWSetAttrsRequest req(cct, rgwlib.get_store()->get_user(user.user_id),
+ rgw_fh->bucket_name(), obj_name);
rgw_fh->encode_attrs(ux_key, ux_attrs);
bool RGWFileHandle::has_children() const
{
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), *fs->get_user());
if (unlikely(! is_dir()))
return false;
- RGWRMdirCheck req(fs->get_context(), &ruser, this);
+ RGWRMdirCheck req(fs->get_context(),
+ rgwlib.get_store()->get_user(fs->get_user()->user_id),
+ this);
int rc = rgwlib.get_fe()->execute_req(&req);
if (! rc) {
return req.valid && req.has_children;
int rc = 0;
struct timespec now;
CephContext* cct = fs->get_context();
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), *fs->get_user());
lsubdout(cct, rgw, 10)
<< __func__ << " readdir called on "
}
if (is_root()) {
- RGWListBucketsRequest req(cct, &ruser, this, rcb, cb_arg,
- offset);
+ RGWListBucketsRequest req(cct, rgwlib.get_store()->get_user(fs->get_user()->user_id),
+ this, rcb, cb_arg, offset);
rc = rgwlib.get_fe()->execute_req(&req);
if (! rc) {
(void) clock_gettime(CLOCK_MONOTONIC_COARSE, &now); /* !LOCKED */
*eof = req.eof();
}
} else {
- RGWReaddirRequest req(cct, &ruser, this, rcb, cb_arg, offset);
+ RGWReaddirRequest req(cct, rgwlib.get_store()->get_user(fs->get_user()->user_id),
+ this, rcb, cb_arg, offset);
rc = rgwlib.get_fe()->execute_req(&req);
if (! rc) {
(void) clock_gettime(CLOCK_MONOTONIC_COARSE, &now); /* !LOCKED */
{
using std::get;
using WriteCompletion = RGWLibFS::WriteCompletion;
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), *fs->get_user());
lock_guard guard(mtx);
/* start */
std::string object_name = relative_object_name();
f->write_req =
- new RGWWriteRequest(rgwlib.get_store(), &ruser, this,
- bucket_name(), object_name);
+ new RGWWriteRequest(rgwlib.get_store(),
+ rgwlib.get_store()->get_user(fs->get_user()->user_id),
+ this, bucket_name(), object_name);
rc = rgwlib.get_fe()->start_req(f->write_req);
if (rc < 0) {
lsubdout(fs->get_context(), rgw, 5)
{
RGWLibFS *fs = static_cast<RGWLibFS*>(rgw_fs->fs_private);
struct rados_cluster_stat_t stats;
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), *fs->get_user());
- RGWGetClusterStatReq req(fs->get_context(), &ruser, stats);
+ RGWGetClusterStatReq req(fs->get_context(),
+ rgwlib.get_store()->get_user(fs->get_user()->user_id),
+ stats);
int rc = rgwlib.get_fe()->execute_req(&req);
if (rc < 0) {
lderr(fs->get_context()) << "ERROR: getting total cluster usage"
CephContext* cct = static_cast<CephContext*>(rgw_fs->rgw);
RGWLibFS *fs = static_cast<RGWLibFS*>(rgw_fs->fs_private);
RGWFileHandle* rgw_fh = get_rgwfh(fh);
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), *fs->get_user());
if (! rgw_fh->is_file())
return -EINVAL;
}
std::string oname = rgw_fh->relative_object_name();
- RGWPutObjRequest req(cct, &ruser, rgw_fh->bucket_name(),
- oname, bl);
+ RGWPutObjRequest req(cct, rgwlib.get_store()->get_user(fs->get_user()->user_id),
+ rgw_fh->bucket_name(), oname, bl);
int rc = rgwlib.get_fe()->execute_req(&req);
uint32_t d_count;
bool rcb_eof; // caller forced early stop in readdir cycle
- RGWListBucketsRequest(CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWListBucketsRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
RGWFileHandle* _rgw_fh, rgw_readdir_cb _rcb,
void* _cb_arg, RGWFileHandle::readdir_offset& _offset)
- : RGWLibRequest(_cct, _user), rgw_fh(_rgw_fh), offset(_offset),
+ : RGWLibRequest(_cct, std::move(_user)), rgw_fh(_rgw_fh), offset(_offset),
cb_arg(_cb_arg), rcb(_rcb), ioff(nullptr), ix(0), d_count(0),
rcb_eof(false) {
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
return 0;
}
uint32_t d_count;
bool rcb_eof; // caller forced early stop in readdir cycle
- RGWReaddirRequest(CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWReaddirRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
RGWFileHandle* _rgw_fh, rgw_readdir_cb _rcb,
void* _cb_arg, RGWFileHandle::readdir_offset& _offset)
- : RGWLibRequest(_cct, _user), rgw_fh(_rgw_fh), offset(_offset),
+ : RGWLibRequest(_cct, std::move(_user)), rgw_fh(_rgw_fh), offset(_offset),
cb_arg(_cb_arg), rcb(_rcb), ioff(nullptr), ix(0), d_count(0),
rcb_eof(false) {
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
prefix = rgw_fh->relative_object_name();
if (prefix.length() > 0)
prefix += "/";
bool valid;
bool has_children;
- RGWRMdirCheck (CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWRMdirCheck (CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
const RGWFileHandle* _rgw_fh)
- : RGWLibRequest(_cct, _user), rgw_fh(_rgw_fh), valid(false),
+ : RGWLibRequest(_cct, std::move(_user)), rgw_fh(_rgw_fh), valid(false),
has_children(false) {
default_max = 2;
op = this;
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
prefix = rgw_fh->relative_object_name();
if (prefix.length() > 0)
prefix += "/";
public:
const std::string& bucket_name;
- RGWCreateBucketRequest(CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWCreateBucketRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
std::string& _bname)
- : RGWLibRequest(_cct, _user), bucket_name(_bname) {
+ : RGWLibRequest(_cct, std::move(_user)), bucket_name(_bname) {
op = this;
}
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
return 0;
}
public:
const std::string& bucket_name;
- RGWDeleteBucketRequest(CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWDeleteBucketRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
std::string& _bname)
- : RGWLibRequest(_cct, _user), bucket_name(_bname) {
+ : RGWLibRequest(_cct, std::move(_user)), bucket_name(_bname) {
op = this;
}
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
return 0;
}
buffer::list& bl; /* XXX */
size_t bytes_written;
- RGWPutObjRequest(CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWPutObjRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
const std::string& _bname, const std::string& _oname,
buffer::list& _bl)
- : RGWLibRequest(_cct, _user), bucket_name(_bname), obj_name(_oname),
+ : RGWLibRequest(_cct, std::move(_user)), bucket_name(_bname), obj_name(_oname),
bl(_bl), bytes_written(0) {
op = this;
}
/* XXX required in RGWOp::execute() */
s->content_length = bl.length();
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
return 0;
}
size_t read_resid; /* initialize to len, <= sizeof(ulp_buffer) */
bool do_hexdump = false;
- RGWReadRequest(CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWReadRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
RGWFileHandle* _rgw_fh, uint64_t off, uint64_t len,
void *_ulp_buffer)
- : RGWLibRequest(_cct, _user), rgw_fh(_rgw_fh), ulp_buffer(_ulp_buffer),
+ : RGWLibRequest(_cct, std::move(_user)), rgw_fh(_rgw_fh), ulp_buffer(_ulp_buffer),
nread(0), read_resid(len) {
op = this;
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
return 0;
}
const std::string& bucket_name;
const std::string& obj_name;
- RGWDeleteObjRequest(CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWDeleteObjRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
const std::string& _bname, const std::string& _oname)
- : RGWLibRequest(_cct, _user), bucket_name(_bname), obj_name(_oname) {
+ : RGWLibRequest(_cct, std::move(_user)), bucket_name(_bname), obj_name(_oname) {
op = this;
}
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
return 0;
}
static constexpr uint32_t FLAG_NONE = 0x000;
- RGWStatObjRequest(CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWStatObjRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
const std::string& _bname, const std::string& _oname,
uint32_t _flags)
- : RGWLibRequest(_cct, _user), bucket_name(_bname), obj_name(_oname),
+ : RGWLibRequest(_cct, std::move(_user)), bucket_name(_bname), obj_name(_oname),
_size(0), flags(_flags) {
op = this;
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
return 0;
}
std::map<std::string, buffer::list> attrs;
RGWLibFS::BucketStats& bs;
- RGWStatBucketRequest(CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWStatBucketRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
const std::string& _path,
RGWLibFS::BucketStats& _stats)
- : RGWLibRequest(_cct, _user), bs(_stats) {
+ : RGWLibRequest(_cct, std::move(_user)), bs(_stats) {
uri = "/" + _path;
op = this;
}
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
return 0;
}
bool is_dir;
bool exact_matched;
- RGWStatLeafRequest(CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWStatLeafRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
RGWFileHandle* _rgw_fh, const std::string& _path)
- : RGWLibRequest(_cct, _user), rgw_fh(_rgw_fh), path(_path),
+ : RGWLibRequest(_cct, std::move(_user)), rgw_fh(_rgw_fh), path(_path),
matched(false), is_dir(false), exact_matched(false) {
default_max = 1000; // logical max {"foo", "foo/"}
op = this;
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
prefix = rgw_fh->relative_object_name();
if (prefix.length() > 0)
prefix += "/";
size_t bytes_written;
bool eio;
- RGWWriteRequest(rgw::sal::RGWRadosStore* store, rgw::sal::RGWUser* _user, RGWFileHandle* _fh,
- const std::string& _bname, const std::string& _oname)
- : RGWLibContinuedReq(store->ctx(), _user),
+ RGWWriteRequest(rgw::sal::RGWRadosStore* store, std::unique_ptr<rgw::sal::RGWUser> _user,
+ RGWFileHandle* _fh, const std::string& _bname, const std::string& _oname)
+ : RGWLibContinuedReq(store->ctx(), std::move(_user)),
bucket_name(_bname), obj_name(_oname),
rgw_fh(_fh), filter(nullptr), real_ofs(0),
bytes_written(0), eio(false) {
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
return 0;
}
const std::string& src_name;
const std::string& dst_name;
- RGWCopyObjRequest(CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWCopyObjRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
RGWFileHandle* _src_parent, RGWFileHandle* _dst_parent,
const std::string& _src_name, const std::string& _dst_name)
- : RGWLibRequest(_cct, _user), src_parent(_src_parent),
+ : RGWLibRequest(_cct, std::move(_user)), src_parent(_src_parent),
dst_parent(_dst_parent), src_name(_src_name), dst_name(_dst_name) {
/* all requests have this */
op = this;
s->info.domain = ""; /* XXX ? */
#endif
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
return 0;
}
const std::string& bucket_name;
const std::string& obj_name;
- RGWSetAttrsRequest(CephContext* _cct, rgw::sal::RGWUser* _user,
+ RGWSetAttrsRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
const std::string& _bname, const std::string& _oname)
- : RGWLibRequest(_cct, _user), bucket_name(_bname), obj_name(_oname) {
+ : RGWLibRequest(_cct, std::move(_user)), bucket_name(_bname), obj_name(_oname) {
op = this;
}
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
- // woo
- s->user = user;
- s->bucket_tenant = user->get_tenant();
-
return 0;
}
public RGWGetClusterStat {
public:
struct rados_cluster_stat_t& stats_req;
- RGWGetClusterStatReq(CephContext* _cct,rgw::sal::RGWUser* _user,
+ RGWGetClusterStatReq(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user,
rados_cluster_stat_t& _stats):
- RGWLibRequest(_cct, _user), stats_req(_stats){
+ RGWLibRequest(_cct, std::move(_user)), stats_req(_stats){
op = this;
}
struct req_state* s = get_state();
s->info.method = "GET";
s->op = OP_GET;
- s->user = user;
return 0;
}
class RGWLibRequest : public RGWRequest,
public RGWHandler_Lib {
+ private:
+ std::unique_ptr<rgw::sal::RGWUser> tuser; // Don't use this. It's empty except during init.
public:
CephContext* cct;
- rgw::sal::RGWUser* user;
boost::optional<RGWSysObjectCtx> sysobj_ctx;
/* unambiguiously return req_state */
inline struct req_state* get_state() { return this->RGWRequest::s; }
- RGWLibRequest(CephContext* _cct, rgw::sal::RGWUser* _user)
- : RGWRequest(rgwlib.get_store()->getRados()->get_new_req_id()), cct(_cct),
- user(_user)
+ RGWLibRequest(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user)
+ : RGWRequest(rgwlib.get_store()->getRados()->get_new_req_id()),
+ tuser(std::move(_user)), cct(_cct)
{}
- rgw::sal::RGWUser* get_user() { return user; }
-
int postauth_init() override { return 0; }
/* descendant equivalent of *REST*::init_from_header(...):
get_state()->sysobj_ctx = &(sysobj_ctx.get());
get_state()->req_id = store->svc()->zone_utils->unique_id(id);
get_state()->trans_id = store->svc()->zone_utils->unique_trans_id(id);
+ get_state()->bucket_tenant = tuser->get_tenant();
+ get_state()->set_user(tuser);
ldpp_dout(_s, 2) << "initializing for trans_id = "
<< get_state()->trans_id.c_str() << dendl;
RGWObjectCtx rados_ctx;
public:
- RGWLibContinuedReq(CephContext* _cct, rgw::sal::RGWUser* _user)
- : RGWLibRequest(_cct, _user), io_ctx(),
- rstate(_cct, &io_ctx.get_env(), _user, id),
+ RGWLibContinuedReq(CephContext* _cct, std::unique_ptr<rgw::sal::RGWUser> _user)
+ : RGWLibRequest(_cct, std::move(_user)), io_ctx(),
+ rstate(_cct, &io_ctx.get_env(), id),
rados_ctx(rgwlib.get_store(), &rstate)
{
io_ctx.init(_cct);
if (!s->bucket_name.empty()) {
s->bucket_exists = true;
- ret = store->get_bucket(s->user, rgw_bucket(rgw_bucket_key(s->bucket_tenant, s->bucket_name, s->bucket_instance_id)), &s->bucket);
+ ret = store->get_bucket(s->user.get(), rgw_bucket(rgw_bucket_key(s->bucket_tenant, s->bucket_name, s->bucket_instance_id)), &s->bucket);
if (ret < 0) {
if (ret != -ENOENT) {
string bucket_log;
if (op_ret < 0)
return;
- op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, in_data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
}
void RGWDeleteBucketTags::execute()
{
bufferlist in_data;
- op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, in_data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
if (op_ret < 0)
return;
- op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, in_data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
void RGWDeleteBucketReplication::execute()
{
bufferlist in_data;
- op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, in_data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
rgw::sal::RGWUser* user;
if (s->user->get_id() == s->bucket_owner.get_id()) {
- user = s->user;
+ user = s->user.get();
} else {
int r = owner_user.load_by_id(s->yield);
if (r < 0)
if (bucket_name.compare(s->bucket->get_name()) != 0) {
map<string, bufferlist> bucket_attrs;
- r = store->get_bucket(s->user, s->user->get_tenant(), bucket_name, &ubucket);
+ r = store->get_bucket(s->user.get(), s->user->get_tenant(), bucket_name, &ubucket);
if (r < 0) {
ldpp_dout(this, 0) << "could not get bucket info for bucket="
<< bucket_name << dendl;
std::unique_ptr<rgw::sal::RGWBucket> tmp_bucket;
auto obj_ctx = store->svc()->sysobj->init_obj_ctx();
- int r = store->get_bucket(s->user, s->user->get_tenant(), bucket_name, &tmp_bucket);
+ int r = store->get_bucket(s->user.get(), s->user->get_tenant(), bucket_name, &tmp_bucket);
if (r < 0) {
ldpp_dout(this, 0) << "could not get bucket info for bucket="
<< bucket_name << dendl;
}
}
- op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, in_data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
if (op_ret < 0)
return;
- op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, in_data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << " forward_request_to_master returned ret=" << op_ret << dendl;
return;
{
bufferlist in_data;
- op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, in_data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "NOTICE: forward_to_master failed on bucket=" << s->bucket->get_name()
<< "returned err=" << op_ret << dendl;
return;
}
- op_ret = store->get_bucket(s->user, s->bucket->get_key(), &bucket);
+ op_ret = store->get_bucket(s->user.get(), s->bucket->get_key(), &bucket);
if (op_ret) {
return;
}
/* 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, s->bucket_name, &s->bucket);
+ op_ret = store->get_bucket(s->user.get(), s->bucket_tenant, s->bucket_name, &s->bucket);
if (op_ret < 0 && op_ret != -ENOENT)
return;
s->bucket_exists = (op_ret != -ENOENT);
op_ret = s->bucket->get_bucket_info(s->yield);
if (op_ret < 0) {
return;
- } else if (!s->bucket->is_owner(s->user)) {
+ } else if (!s->bucket->is_owner(s->user.get())) {
/* New bucket doesn't belong to the account we're operating on. */
op_ret = -EEXIST;
return;
}
bufferlist in_data;
- op_ret = store->forward_request_to_master(s->user, &ot.read_version, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), &ot.read_version, in_data, nullptr, s->info);
if (op_ret < 0) {
if (op_ret == -ENOENT) {
/* adjust error, we want to return with NoSuchBucket and not
}
/* This is a bit of a hack; create an empty bucket, then load it below. */
- op_ret = store->get_bucket(s->user, RGWBucketInfo(), &src_bucket);
+ op_ret = store->get_bucket(s->user.get(), RGWBucketInfo(), &src_bucket);
if (op_ret < 0) {
if (op_ret == -ENOENT) {
op_ret = -ERR_NO_SUCH_BUCKET;
or intra region sync */
dest_bucket = src_bucket->clone();
} else {
- op_ret = store->get_bucket(s->user, RGWBucketInfo(), &dest_bucket);
+ op_ret = store->get_bucket(s->user.get(), RGWBucketInfo(), &dest_bucket);
if (op_ret < 0) {
if (op_ret == -ENOENT) {
op_ret = -ERR_NO_SUCH_BUCKET;
}
op_ret = src_object->copy_object(obj_ctx,
- s->user,
+ s->user.get(),
&s->info,
source_zone,
dest_object.get(),
if (s->canned_acl.empty()) {
in_data.append(data);
}
- op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, in_data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
ldpp_dout(this, 15) << "New LifecycleConfiguration:" << ss.str() << dendl;
}
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
void RGWDeleteLC::execute()
{
bufferlist data;
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
if (op_ret < 0)
return;
- op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, in_data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
void RGWDeleteCORS::execute()
{
bufferlist data;
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
void RGWSetRequestPayment::execute()
{
- op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, in_data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
ACLOwner bowner;
RGWObjVersionTracker ot;
- int ret = store->get_bucket(s->user, s->user->get_tenant(), path.bucket_name, &bucket);
+ int ret = store->get_bucket(s->user.get(), s->user->get_tenant(), path.bucket_name, &bucket);
if (ret < 0) {
goto binfo_fail;
}
std::unique_ptr<rgw::sal::RGWBucket> bucket;
ACLOwner bowner;
- op_ret = store->get_bucket(s->user, rgw_bucket(rgw_bucket_key(s->user->get_tenant(), bucket_name)), &bucket);
+ op_ret = store->get_bucket(s->user.get(), rgw_bucket(rgw_bucket_key(s->user->get_tenant(), bucket_name)), &bucket);
if (op_ret == -ENOENT) {
ldpp_dout(this, 20) << "non existent directory=" << bucket_name << dendl;
} else if (op_ret < 0) {
return;
}
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 20) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
return;
}
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldout(s->cct, 20) << __func__ << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
return;
}
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
RGWEnv& rgw_env = client_io->get_env();
- rgw::sal::RGWRadosUser user(store);
-
- struct req_state rstate(g_ceph_context, &rgw_env, &user, req->id);
+ struct req_state rstate(g_ceph_context, &rgw_env, req->id);
struct req_state *s = &rstate;
+ std::unique_ptr<rgw::sal::RGWUser> u = store->get_user(rgw_user());
+ s->set_user(u);
+
RGWObjectCtx rados_ctx(store, s);
s->obj_ctx = &rados_ctx;
op_state.set_new_bucket_name(new_bucket_name);
bufferlist data;
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
op_state.set_bucket_name(bucket);
bufferlist data;
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
}
bufferlist data;
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
}
bufferlist data;
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
op_state.set_purge_data(purge_data);
bufferlist data;
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
op_state.set_key_type(key_type);
bufferlist data;
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
op_state.set_key_type(key_type);
bufferlist data;
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
op_state.set_purge_keys();
bufferlist data;
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
op_state.set_caps(caps);
bufferlist data;
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
op_state.set_caps(caps);
bufferlist data;
- op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
return;
}
ceph::bufferlist in_data;
- op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, in_data, nullptr, s->info);
if (op_ret < 0) {
ldpp_dout(this, 0) << "ERROR: forward_request_to_master returned ret=" << op_ret << dendl;
return;
}
ceph::bufferlist in_data;
- op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info);
+ op_ret = store->forward_request_to_master(s->user.get(), nullptr, in_data, nullptr, s->info);
if (op_ret < 0) {
// a policy might've been uploaded to this site when there was no sync
// req. in earlier releases, proceed deletion
/* dang temporary; will be removed when User is complete */
rgw_user& get_user() { return info.user_id; }
RGWUserInfo& get_info() { return info; }
+
+ friend inline ostream& operator<<(ostream& out, const RGWUser& u) {
+ out << u.info.user_id;
+ return out;
+ }
+
+ friend inline ostream& operator<<(ostream& out, const RGWUser* u) {
+ if (!u)
+ out << "<NULL>";
+ else
+ out << u->info.user_id;
+ return out;
+ }
+
+ friend inline ostream& operator<<(ostream& out, const std::unique_ptr<RGWUser>& p) {
+ out << p.get();
+ return out;
+ }
+
};
class RGWBucket {
std::cout << "creating: " << bucket_name << ":" << obj_name
<< std::endl;
}
- rgw::sal::RGWRadosUser ruser(rgwlib.get_store(), *fs_private->get_user());
- RGWPutObjRequest req(cct, &ruser, bucket_name, obj_name,
- bl);
+ RGWPutObjRequest req(cct,
+ rgwlib.get_store()->get_user(fs_private->get_user()->user_id),
+ bucket_name, obj_name, bl);
int rc = rgwlib.get_fe()->execute_req(&req);
int rc2 = req.get_ret();
ASSERT_EQ(rc, 0);
// Unfortunately RGWCivetWeb is too tightly tied to civetweb to test RGWCivetWeb::init_env.
RGWEnv rgw_env;
rgw::sal::RGWRadosStore store;
- rgw::sal::RGWRadosUser user(&store);
+ std::unique_ptr<rgw::sal::RGWUser> user = store.get_user(rgw_user());
rgw_env.set("REMOTE_ADDR", "192.168.1.1");
rgw_env.set("HTTP_HOST", "1.2.3.4");
- req_state rgw_req_state(cct.get(), &rgw_env, &user, 0);
+ req_state rgw_req_state(cct.get(), &rgw_env, 0);
+ rgw_req_state.set_user(user);
rgw_build_iam_environment(&store, &rgw_req_state);
auto ip = rgw_req_state.env.find("aws:SourceIp");
ASSERT_NE(ip, rgw_req_state.env.end());