std::unique_ptr<Bucket> bucket;
// Look up the bucket. Create it if it doesn't exist.
- ret = this->store->get_bucket(dpp, this, b, &bucket, y);
+ ret = this->store->load_bucket(dpp, this, b, &bucket, y);
if (ret != 0 && ret != -ENOENT) {
return ret;
}
return out << s;
}
-int DaosStore::get_bucket(const DoutPrefixProvider* dpp, User* u,
- const rgw_bucket& b, std::unique_ptr<Bucket>* bucket,
- optional_yield y) {
- ldpp_dout(dpp, 20) << "DEBUG: get_bucket1: User: " << u << dendl;
- int ret;
- Bucket* bp;
-
- bp = new DaosBucket(this, b, u);
- ret = bp->load_bucket(dpp, y);
- if (ret != 0) {
- delete bp;
- return ret;
- }
-
- bucket->reset(bp);
- return 0;
+std::unique_ptr<Bucket> DaosStore::get_bucket(User* u, const RGWBucketInfo& i) {
+ /* Don't need to fetch the bucket info, use the provided one */
+ return std::make_unique<DaosBucket>(this, i, u);
}
-int DaosStore::get_bucket(User* u, const RGWBucketInfo& i,
- std::unique_ptr<Bucket>* bucket) {
- DaosBucket* bp;
-
- bp = new DaosBucket(this, i, u);
- /* Don't need to fetch the bucket info, use the provided one */
+int DaosStore::load_bucket(const DoutPrefixProvider* dpp, User* u,
+ const rgw_bucket& b, std::unique_ptr<Bucket>* bucket,
+ optional_yield y) {
+ ldpp_dout(dpp, 20) << "DEBUG: get_bucket1: User: " << u << dendl;
- bucket->reset(bp);
- return 0;
+ *bucket = std::make_unique<DaosBucket>(this, b, u);
+ return (*bucket)->load_bucket(dpp, y);
}
-int DaosStore::get_bucket(const DoutPrefixProvider* dpp, User* u,
- const std::string& tenant, const std::string& name,
- std::unique_ptr<Bucket>* bucket, optional_yield y) {
+int DaosStore::load_bucket(const DoutPrefixProvider* dpp, User* u,
+ const std::string& tenant, const std::string& name,
+ std::unique_ptr<Bucket>* bucket, optional_yield y) {
ldpp_dout(dpp, 20) << "get_bucket" << dendl;
rgw_bucket b;
b.tenant = tenant;
b.name = name;
- return get_bucket(dpp, u, b, bucket, y);
+ return load_bucket(dpp, u, b, bucket, y);
}
bool DaosStore::is_meta_master() { return true; }
const std::string& user_str, optional_yield y,
std::unique_ptr<User>* user) override;
virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
- virtual int get_bucket(const DoutPrefixProvider* dpp, User* u,
- const rgw_bucket& b, std::unique_ptr<Bucket>* bucket,
- optional_yield y) override;
- virtual int get_bucket(User* u, const RGWBucketInfo& i,
- std::unique_ptr<Bucket>* bucket) override;
- virtual int get_bucket(const DoutPrefixProvider* dpp, User* u,
- const std::string& tenant, const std::string& name,
- std::unique_ptr<Bucket>* bucket,
- optional_yield y) override;
+ std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i) override;
+ int load_bucket(const DoutPrefixProvider* dpp, User* u,
+ const rgw_bucket& b, std::unique_ptr<Bucket>* bucket,
+ optional_yield y) override;
+ int load_bucket(const DoutPrefixProvider* dpp, User* u,
+ const std::string& tenant, const std::string& name,
+ std::unique_ptr<Bucket>* bucket,
+ optional_yield y) override;
virtual bool is_meta_master() override;
virtual int forward_request_to_master(const DoutPrefixProvider* dpp,
User* user, obj_version* objv,
std::unique_ptr<Bucket> bucket;
// Look up the bucket. Create it if it doesn't exist.
- ret = this->store->get_bucket(dpp, this, b, &bucket, y);
+ ret = this->store->load_bucket(dpp, this, b, &bucket, y);
if (ret < 0 && ret != -ENOENT)
return ret;
}
-int MotrStore::get_bucket(const DoutPrefixProvider *dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y)
+std::unique_ptr<Bucket> MotrStore::get_bucket(User* u, const RGWBucketInfo& i)
{
- int ret;
- Bucket* bp;
-
- bp = new MotrBucket(this, b, u);
- ret = bp->load_bucket(dpp, y);
- if (ret < 0) {
- delete bp;
- return ret;
- }
-
- bucket->reset(bp);
- return 0;
+ /* Don't need to fetch the bucket info, use the provided one */
+ return std::make_unique<MotrBucket>(this, i, u);
}
-int MotrStore::get_bucket(User* u, const RGWBucketInfo& i, std::unique_ptr<Bucket>* bucket)
+int MotrStore::load_bucket(const DoutPrefixProvider *dpp, User* u, const rgw_bucket& b,
+ std::unique_ptr<Bucket>* bucket, optional_yield y)
{
- Bucket* bp;
-
- bp = new MotrBucket(this, i, u);
- /* Don't need to fetch the bucket info, use the provided one */
-
- bucket->reset(bp);
- return 0;
+ *bucket = std::make_unique<MotrBucket>(this, b, u);
+ return (*bucket)->load_bucket(dpp, y);
}
-int MotrStore::get_bucket(const DoutPrefixProvider *dpp, User* u, const std::string& tenant, const std::string& name, std::unique_ptr<Bucket>* bucket, optional_yield y)
+int MotrStore::load_bucket(const DoutPrefixProvider *dpp, User* u, const std::string& tenant, const std::string& name, std::unique_ptr<Bucket>* bucket, optional_yield y)
{
rgw_bucket b;
b.tenant = tenant;
b.name = name;
- return get_bucket(dpp, u, b, bucket, y);
+ return load_bucket(dpp, u, b, bucket, y);
}
bool MotrStore::is_meta_master()
virtual int get_user_by_email(const DoutPrefixProvider *dpp, const std::string& email, optional_yield y, std::unique_ptr<User>* user) override;
virtual int get_user_by_swift(const DoutPrefixProvider *dpp, const std::string& user_str, optional_yield y, std::unique_ptr<User>* user) override;
virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
- virtual int get_bucket(const DoutPrefixProvider *dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y) override;
- virtual int get_bucket(User* u, const RGWBucketInfo& i, std::unique_ptr<Bucket>* bucket) override;
- virtual int get_bucket(const DoutPrefixProvider *dpp, User* u, const std::string& tenant, const std::string&name, std::unique_ptr<Bucket>* bucket, optional_yield y) override;
+ std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i) override;
+ int load_bucket(const DoutPrefixProvider *dpp, User* u, const rgw_bucket& b,
+ std::unique_ptr<Bucket>* bucket, optional_yield y) override;
+ int load_bucket(const DoutPrefixProvider *dpp, User* u,
+ const std::string& tenant, const std::string& name,
+ std::unique_ptr<Bucket>* bucket, optional_yield y) override;
virtual bool is_meta_master() override;
virtual int forward_request_to_master(const DoutPrefixProvider *dpp, User* user, obj_version* objv,
bufferlist& in_data, JSONParser *jp, req_info& info,
return std::make_unique<POSIXObject>(this, k);
}
-int POSIXDriver::get_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y)
+int POSIXDriver::load_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y)
{
- int ret;
- Bucket* bp;
-
- bp = new POSIXBucket(this, root_fd, b, u);
- ret = bp->load_bucket(dpp, y);
- if (ret < 0) {
- delete bp;
- return ret;
- }
-
- bucket->reset(bp);
- return 0;
+ *bucket = std::make_unique<POSIXBucket>(this, root_fd, b, u);
+ return (*bucket)->load_bucket(dpp, y);
}
-int POSIXDriver::get_bucket(User* u, const RGWBucketInfo& i, std::unique_ptr<Bucket>* bucket)
+std::unique_ptr<Bucket> POSIXDriver::get_bucket(User* u, const RGWBucketInfo& i)
{
- Bucket* bp;
-
- bp = new POSIXBucket(this, root_fd, i, u);
/* Don't need to fetch the bucket info, use the provided one */
-
- bucket->reset(bp);
- return 0;
+ return std::make_unique<POSIXBucket>(this, root_fd, i, u);
}
-int POSIXDriver::get_bucket(const DoutPrefixProvider* dpp, User* u, const std::string& tenant, const std::string& name, std::unique_ptr<Bucket>* bucket, optional_yield y)
+int POSIXDriver::load_bucket(const DoutPrefixProvider* dpp, User* u, const std::string& tenant, const std::string& name, std::unique_ptr<Bucket>* bucket, optional_yield y)
{
rgw_bucket b;
b.tenant = tenant;
b.name = name;
- return get_bucket(dpp, u, b, bucket, y);
+ return load_bucket(dpp, u, b, bucket, y);
}
std::string POSIXDriver::zone_unique_trans_id(const uint64_t unique_num)
{
std::unique_ptr<rgw::sal::Bucket> bucket;
- int ret = driver->get_bucket(dpp, this, b, &bucket, y);
+ int ret = driver->load_bucket(dpp, this, b, &bucket, y);
if (ret >= 0) {
*existed = true;
// Bucket exists. Check owner comparison
POSIXObject *pobj;
int ret;
- ret = get_bucket(nullptr, nullptr, std::string(), bname, &b, null_yield);
+ ret = load_bucket(nullptr, nullptr, std::string(), bname, &b, null_yield);
if (ret < 0)
return ret;
std::string& user_str, optional_yield y,
std::unique_ptr<User>* user) override;
virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
- virtual int get_bucket(User* u, const RGWBucketInfo& i,
- std::unique_ptr<Bucket>* bucket) override;
- virtual int get_bucket(const DoutPrefixProvider* dpp, User* u, const
- rgw_bucket& b, std::unique_ptr<Bucket>* bucket,
- optional_yield y) override;
- virtual int get_bucket(const DoutPrefixProvider* dpp, User* u, const
- std::string& tenant, const std::string& name,
- std::unique_ptr<Bucket>* bucket, optional_yield y) override;
+ virtual std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i) override;
+ virtual int load_bucket(const DoutPrefixProvider* dpp, User* u, const
+ rgw_bucket& b, std::unique_ptr<Bucket>* bucket,
+ optional_yield y) override;
+ virtual int load_bucket(const DoutPrefixProvider* dpp, User* u, const
+ std::string& tenant, const std::string& name,
+ std::unique_ptr<Bucket>* bucket, optional_yield y) override;
virtual std::string zone_unique_trans_id(const uint64_t unique_num) override;
virtual std::unique_ptr<Writer> get_append_writer(const DoutPrefixProvider *dpp,
for (const auto& ent : listing.buckets) {
std::unique_ptr<rgw::sal::Bucket> bucket;
- int r = driver->get_bucket(dpp, &user, user.get_tenant(), ent.bucket.name, &bucket, y);
+ int r = driver->load_bucket(dpp, &user, user.get_tenant(), ent.bucket.name, &bucket, y);
if (r < 0) {
ldpp_dout(dpp, 0) << "could not get bucket info for bucket=" << bucket << dendl;
continue;
bucket_name = bucket_name.substr(pos + 1);
}
- int r = driver->get_bucket(dpp, user.get(), tenant, bucket_name, &bucket, y);
+ int r = driver->load_bucket(dpp, user.get(), tenant, bucket_name, &bucket, y);
if (r < 0) {
set_err_msg(err_msg, "failed to fetch bucket info for bucket=" + bucket_name);
return r;
std::unique_ptr<rgw::sal::Bucket> bucket;
std::unique_ptr<rgw::sal::User> user = driver->get_user(op_state.get_user_id());
- int ret = driver->get_bucket(dpp, user.get(), user->get_tenant(), op_state.get_bucket_name(),
- &bucket, y);
+ int ret = driver->load_bucket(dpp, user.get(), user->get_tenant(),
+ op_state.get_bucket_name(), &bucket, y);
if (ret < 0)
return ret;
std::unique_ptr<rgw::sal::Bucket> bucket;
map<RGWObjCategory, RGWStorageStats> stats;
- int ret = driver->get_bucket(dpp, nullptr, tenant_name, bucket_name, &bucket, y);
+ int ret = driver->load_bucket(dpp, nullptr, tenant_name, bucket_name, &bucket, y);
if (ret < 0) {
return ret;
}
uint64_t num_objects = 0;
std::unique_ptr<rgw::sal::Bucket> bucket;
- ret = driver->get_bucket(dpp, user.get(), ent.bucket, &bucket, y);
+ ret = driver->load_bucket(dpp, user.get(), ent.bucket, &bucket, y);
if (ret < 0)
continue;
std::unique_ptr<rgw::sal::Bucket> bucket;
rgw_bucket rbucket;
rgw_bucket_parse_bucket_key(driver->ctx(), bucket_instance, &rbucket, nullptr);
- int r = driver->get_bucket(dpp, nullptr, rbucket, &bucket, y);
+ int r = driver->load_bucket(dpp, nullptr, rbucket, &bucket, y);
if (r < 0){
// this can only happen if someone deletes us right when we're processing
ldpp_dout(dpp, -1) << "Bucket instance is invalid: " << bucket_instance
auto [tenant, bname] = split_tenant(bucket_name);
RGWBucketInfo cur_bucket_info;
std::unique_ptr<rgw::sal::Bucket> cur_bucket;
- int r = driver->get_bucket(dpp, nullptr, tenant, bname, &cur_bucket, y);
+ int r = driver->load_bucket(dpp, nullptr, tenant, bname, &cur_bucket, y);
if (r < 0) {
if (r == -ENOENT) {
// bucket doesn't exist, everything is stale then
Formatter *formatter,
rgw::sal::Driver* driver){
for (const auto &binfo: lst) {
- std::unique_ptr<rgw::sal::Bucket> bucket;
- driver->get_bucket(nullptr, binfo, &bucket);
+ auto bucket = driver->get_bucket(nullptr, binfo);
int ret = bucket->purge_instance(dpp, y);
if (ret == 0){
auto md_key = "bucket.instance:" + binfo.bucket.get_key();
const DoutPrefixProvider *dpp, optional_yield y)
{
std::unique_ptr<rgw::sal::Bucket> bucket;
- int ret = driver->get_bucket(dpp, nullptr, tenant_name, bucket_name, &bucket, y);
+ int ret = driver->load_bucket(dpp, nullptr, tenant_name, bucket_name, &bucket, y);
if (ret < 0) {
// TODO: Should we handle the case where the bucket could've been removed between
// listing and fetching?
ldpp_dout(dpp, -1) << "failed to initialize bucket" << dendl;
return ret;
}
- std::unique_ptr<rgw::sal::Bucket> bucket;
- ret = driver->get_bucket(nullptr, admin_bucket.get_bucket_info(), &bucket);
- if (ret < 0) {
- return ret;
- }
+ auto bucket = driver->get_bucket(nullptr, admin_bucket.get_bucket_info());
return fix_bucket_obj_expiry(dpp, driver, bucket.get(), flusher, dry_run, y);
}
/* update lifecyle policy */
{
- std::unique_ptr<rgw::sal::Bucket> bucket;
- ret = bihandler->driver->get_bucket(nullptr, bci.info, &bucket);
- if (ret < 0) {
- ldpp_dout(dpp, 0) << __func__ << " failed to get_bucket(...) for "
- << bci.info.bucket.name
- << dendl;
- return ret;
- }
+ auto bucket = bihandler->driver->get_bucket(nullptr, bci.info);
auto lc = bihandler->driver->get_rgwlc();
if (_zones_trace) {
zones_trace = *_zones_trace;
}
- store->get_bucket(nullptr, _bucket_info, &bucket);
+ bucket = store->get_bucket(nullptr, _bucket_info);
obj = bucket->get_object(_key);
}
};
template<>
int RGWGetBucketInfoCR::Request::_send_request(const DoutPrefixProvider *dpp)
{
- return store->get_bucket(dpp, nullptr, params.tenant, params.bucket_name, &result->bucket, null_yield);
+ return store->load_bucket(dpp, nullptr, params.tenant, params.bucket_name, &result->bucket, null_yield);
}
template<>
RGWBucketInfo bucket_info;
std::unique_ptr<rgw::sal::Bucket> bucket;
- int ret = driver->get_bucket(dpp, nullptr, rgw_bucket(hint.tenant, hint.bucket_name, hint.bucket_id), &bucket, null_yield);
+ int ret = driver->load_bucket(dpp, nullptr, rgw_bucket(hint.tenant, hint.bucket_name, hint.bucket_id), &bucket, null_yield);
if (-ENOENT == ret) {
ldpp_dout(dpp, 15) << "NOTICE: cannot find bucket = " \
<< hint.bucket_name << ". The object must be already removed" << dendl;
return;
}
- op_ret = driver->get_bucket(s, nullptr, string(), bucket_name, &bucket, y);
+ op_ret = driver->load_bucket(s, nullptr, string(), bucket_name, &bucket, y);
if (op_ret < 0) {
ldpp_dout(this, 0) << "get_bucket returned ret=" << op_ret << dendl;
if (op_ret == -ENOENT) {
}
if (use_http_params) {
std::unique_ptr<rgw::sal::Bucket> bucket;
- op_ret = driver->get_bucket(s, nullptr, uid.tenant, bucket_name, &bucket, s->yield);
+ op_ret = driver->load_bucket(s, nullptr, uid.tenant, bucket_name, &bucket, s->yield);
if (op_ret < 0) {
return;
}
b.name = bn;
b.bucket_id = bucket_instance;
}
- op_ret = driver->get_bucket(s, nullptr, b, &bucket, y);
+ op_ret = driver->load_bucket(s, nullptr, b, &bucket, y);
if (op_ret < 0) {
ldpp_dout(this, 5) << "could not get bucket info for bucket=" << bucket_name << dendl;
return;
b.name = bn;
b.bucket_id = bucket_instance;
}
- op_ret = driver->get_bucket(s, nullptr, b, &bucket, y);
+ op_ret = driver->load_bucket(s, nullptr, b, &bucket, y);
if (op_ret < 0) {
ldpp_dout(this, 5) << "could not get bucket info for bucket=" << bucket_name << dendl;
return;
b.name = bn;
b.bucket_id = bucket_instance;
}
- op_ret = driver->get_bucket(s, nullptr, b, &bucket, y);
+ op_ret = driver->load_bucket(s, nullptr, b, &bucket, y);
if (op_ret < 0) {
ldpp_dout(this, 5) << "could not get bucket info for bucket=" << bucket_name << dendl;
return;
// read the bucket instance info for num_shards
std::unique_ptr<rgw::sal::Bucket> bucket;
- op_ret = driver->get_bucket(s, nullptr, b, &bucket, y);
+ op_ret = driver->load_bucket(s, nullptr, b, &bucket, y);
if (op_ret < 0) {
ldpp_dout(this, 4) << "failed to read bucket info: " << cpp_strerror(op_ret) << dendl;
return;
if (*pipe.dest.bucket != pinfo->bucket) {
opt_dest_info.emplace();
std::unique_ptr<rgw::sal::Bucket> dest_bucket;
- op_ret = driver->get_bucket(s, nullptr, *pipe.dest.bucket, &dest_bucket, y);
+ op_ret = driver->load_bucket(s, nullptr, *pipe.dest.bucket, &dest_bucket, y);
if (op_ret < 0) {
ldpp_dout(this, 4) << "failed to read target bucket info (bucket=: " << cpp_strerror(op_ret) << dendl;
return;
obj_version objv,* pobjv = NULL;
/* If it exists, look it up; otherwise create it */
- ret = store->get_bucket(dpp, this, b, &bucket, y);
+ ret = store->load_bucket(dpp, this, b, &bucket, y);
if (ret < 0 && ret != -ENOENT)
return ret;
return std::make_unique<RadosObject>(this, k);
}
-int RadosStore::get_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y)
+std::unique_ptr<Bucket> RadosStore::get_bucket(User* u, const RGWBucketInfo& i)
{
- int ret;
- Bucket* bp;
-
- bp = new RadosBucket(this, b, u);
- ret = bp->load_bucket(dpp, y);
- if (ret < 0) {
- delete bp;
- return ret;
- }
-
- bucket->reset(bp);
- return 0;
+ /* Don't need to fetch the bucket info, use the provided one */
+ return std::make_unique<RadosBucket>(this, i, u);
}
-int RadosStore::get_bucket(User* u, const RGWBucketInfo& i, std::unique_ptr<Bucket>* bucket)
+int RadosStore::load_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b,
+ std::unique_ptr<Bucket>* bucket, optional_yield y)
{
- Bucket* bp;
-
- bp = new RadosBucket(this, i, u);
- /* Don't need to fetch the bucket info, use the provided one */
-
- bucket->reset(bp);
- return 0;
+ *bucket = std::make_unique<RadosBucket>(this, b, u);
+ return (*bucket)->load_bucket(dpp, y);
}
-int RadosStore::get_bucket(const DoutPrefixProvider* dpp, User* u, const std::string& tenant, const std::string& name, std::unique_ptr<Bucket>* bucket, optional_yield y)
+int RadosStore::load_bucket(const DoutPrefixProvider* dpp, User* u,
+ const std::string& tenant, const std::string& name,
+ std::unique_ptr<Bucket>* bucket, optional_yield y)
{
rgw_bucket b;
b.tenant = tenant;
b.name = name;
- return get_bucket(dpp, u, b, bucket, y);
+ return load_bucket(dpp, u, b, bucket, y);
}
bool RadosStore::is_meta_master()
virtual int get_user_by_email(const DoutPrefixProvider* dpp, const std::string& email, optional_yield y, std::unique_ptr<User>* user) override;
virtual int get_user_by_swift(const DoutPrefixProvider* dpp, const std::string& user_str, optional_yield y, std::unique_ptr<User>* user) override;
virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
- virtual int get_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y) override;
- virtual int get_bucket(User* u, const RGWBucketInfo& i, std::unique_ptr<Bucket>* bucket) override;
- virtual int get_bucket(const DoutPrefixProvider* dpp, User* u, const std::string& tenant, const std::string&name, std::unique_ptr<Bucket>* bucket, optional_yield y) override;
+ std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i) override;
+ int load_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b,
+ std::unique_ptr<Bucket>* bucket, optional_yield y) override;
+ int load_bucket(const DoutPrefixProvider* dpp, User* u,
+ const std::string& tenant, const std::string& name,
+ std::unique_ptr<Bucket>* bucket, optional_yield y) override;
virtual bool is_meta_master() override;
virtual int forward_request_to_master(const DoutPrefixProvider *dpp, User* user, obj_version* objv,
bufferlist& in_data, JSONParser* jp, req_info& info,
int RGWDataAccess::Bucket::init(const DoutPrefixProvider *dpp, optional_yield y)
{
std::unique_ptr<rgw::sal::Bucket> bucket;
- int ret = sd->driver->get_bucket(dpp, nullptr, tenant, name, &bucket, y);
+ int ret = sd->driver->load_bucket(dpp, nullptr, tenant, name, &bucket, y);
if (ret < 0) {
return ret;
}
rgw::BlockingAioThrottle aio(driver->ctx()->_conf->rgw_put_obj_min_window_size);
- std::unique_ptr<rgw::sal::Bucket> b;
- driver->get_bucket(NULL, bucket_info, &b);
+ std::unique_ptr<rgw::sal::Bucket> b = driver->get_bucket(nullptr, bucket_info);
std::unique_ptr<rgw::sal::Object> obj = b->get_object(key);
auto& owner = bucket->policy.get_owner();
for (const auto& ent : listing.buckets) {
std::unique_ptr<rgw::sal::Bucket> bucket;
- ret = driver->get_bucket(dpp, old_user.get(), ent.bucket, &bucket, y);
+ ret = driver->load_bucket(dpp, old_user.get(), ent.bucket, &bucket, y);
if (ret < 0) {
set_err_msg(err_msg, "failed to fetch bucket info for bucket=" + bucket->get_name());
return ret;
for (const auto& ent : listing.buckets) {
std::unique_ptr<rgw::sal::Bucket> bucket;
- ret = driver->get_bucket(dpp, user, ent.bucket, &bucket, y);
+ ret = driver->load_bucket(dpp, user, ent.bucket, &bucket, y);
if (ret < 0) {
set_err_msg(err_msg, "unable to load bucket " + ent.bucket.name);
return ret;
static int init_bucket(rgw::sal::User* user, const rgw_bucket& b,
std::unique_ptr<rgw::sal::Bucket>* bucket)
{
- return driver->get_bucket(dpp(), user, b, bucket, null_yield);
+ return driver->load_bucket(dpp(), user, b, bucket, null_yield);
}
static int init_bucket(rgw::sal::User* user,
bool have_max_size, bool have_max_objects)
{
std::unique_ptr<rgw::sal::Bucket> bucket;
- int r = driver->get_bucket(dpp(), nullptr, tenant_name, bucket_name, &bucket, null_yield);
+ int r = driver->load_bucket(dpp(), nullptr, tenant_name, bucket_name, &bucket, null_yield);
if (r < 0) {
cerr << "could not get bucket info for bucket=" << bucket_name << ": " << cpp_strerror(-r) << std::endl;
return -r;
bool have_max_read_bytes, bool have_max_write_bytes)
{
std::unique_ptr<rgw::sal::Bucket> bucket;
- int r = driver->get_bucket(dpp(), nullptr, tenant_name, bucket_name, &bucket, null_yield);
+ int r = driver->load_bucket(dpp(), nullptr, tenant_name, bucket_name, &bucket, null_yield);
if (r < 0) {
cerr << "could not get bucket info for bucket=" << bucket_name << ": " << cpp_strerror(-r) << std::endl;
return -r;
const string& bucket_name, Formatter *formatter)
{
std::unique_ptr<rgw::sal::Bucket> bucket;
- int r = driver->get_bucket(dpp(), nullptr, tenant_name, bucket_name, &bucket, null_yield);
+ int r = driver->load_bucket(dpp(), nullptr, tenant_name, bucket_name, &bucket, null_yield);
if (r < 0) {
cerr << "could not get bucket info for bucket=" << bucket_name << ": " << cpp_strerror(-r) << std::endl;
return -r;
std::unique_ptr<rgw::sal::Bucket> bucket;
- ret = driver->get_bucket(&dp, &(*user), fd.tenant_name, fd.bucket_name,
- &bucket, null_yield);
+ ret = driver->load_bucket(&dp, &(*user), fd.tenant_name, fd.bucket_name,
+ &bucket, null_yield);
if (ret < 0) {
ERROR << "get_bucket returned " << ret << dendl;
// TODO return something
return 0;
}
- int ret = driver->get_bucket(this, nullptr, bucket_tenant, bucket_name, &bucket, null_yield);
+ int ret = driver->load_bucket(this, nullptr, bucket_tenant, bucket_name, &bucket, null_yield);
if (ret < 0) {
ldpp_dout(this, 0) << "LC:get_bucket for " << bucket_name
<< " failed" << dendl;
/* check if copy source is within the current domain */
if (!s->src_bucket_name.empty()) {
std::unique_ptr<rgw::sal::Bucket> src_bucket;
- ret = driver->get_bucket(dpp, nullptr,
- rgw_bucket_key(s->src_tenant_name,
- s->src_bucket_name),
- &src_bucket, y);
+ ret = driver->load_bucket(dpp, nullptr,
+ rgw_bucket_key(s->src_tenant_name,
+ s->src_bucket_name),
+ &src_bucket, y);
if (ret == 0) {
string& zonegroup = src_bucket->get_info().zonegroup;
s->local_source = driver->get_zone()->get_zonegroup().equals(zonegroup);
/* This is the only place that s->bucket is created. It should never be
* overwritten. */
- ret = driver->get_bucket(dpp, s->user.get(), rgw_bucket(s->bucket_tenant, s->bucket_name, s->bucket_instance_id), &s->bucket, y);
+ ret = driver->load_bucket(dpp, s->user.get(),
+ rgw_bucket(s->bucket_tenant, s->bucket_name,
+ s->bucket_instance_id),
+ &s->bucket, y);
if (ret < 0) {
if (ret != -ENOENT) {
string bucket_log;
if (bucket_name.compare(s->bucket->get_name()) != 0) {
map<string, bufferlist> bucket_attrs;
- r = driver->get_bucket(this, s->user.get(), s->user->get_tenant(), bucket_name, &ubucket, y);
+ r = driver->load_bucket(this, s->user.get(), s->user->get_tenant(),
+ bucket_name, &ubucket, y);
if (r < 0) {
ldpp_dout(this, 0) << "could not get bucket info for bucket="
<< bucket_name << dendl;
RGWAccessControlPolicy& _bucket_acl = allocated_acls.back();
std::unique_ptr<rgw::sal::Bucket> tmp_bucket;
- int r = driver->get_bucket(this, s->user.get(), s->user->get_tenant(), bucket_name, &tmp_bucket, y);
+ int r = driver->load_bucket(this, s->user.get(), s->user->get_tenant(),
+ bucket_name, &tmp_bucket, y);
if (r < 0) {
ldpp_dout(this, 0) << "could not get bucket info for bucket="
<< bucket_name << dendl;
return;
}
- op_ret = driver->get_bucket(this, s->user.get(), s->bucket->get_key(), &bucket, y);
+ op_ret = driver->load_bucket(this, s->user.get(), s->bucket->get_key(), &bucket, y);
if (op_ret) {
return;
}
* specific request */
{
std::unique_ptr<rgw::sal::Bucket> tmp_bucket;
- op_ret = driver->get_bucket(this, s->user.get(), s->bucket_tenant,
- s->bucket_name, &tmp_bucket, y);
+ op_ret = driver->load_bucket(this, s->user.get(), s->bucket_tenant,
+ s->bucket_name, &tmp_bucket, y);
if (op_ret < 0 && op_ret != -ENOENT)
return;
s->bucket_exists = (op_ret != -ENOENT);
}
}
std::unique_ptr<rgw::sal::Bucket> bucket;
- ret = driver->get_bucket(this, s->user.get(), copy_source_tenant_name, copy_source_bucket_name,
- &bucket, y);
+ ret = driver->load_bucket(this, s->user.get(), copy_source_tenant_name,
+ copy_source_bucket_name, &bucket, y);
if (ret < 0) {
ldpp_dout(this, 5) << __func__ << "(): get_bucket() returned ret=" << ret << dendl;
if (ret == -ENOENT) {
RGWAccessControlPolicy cs_acl(s->cct);
boost::optional<Policy> policy;
map<string, bufferlist> cs_attrs;
- std::unique_ptr<rgw::sal::Bucket> cs_bucket;
- int ret = driver->get_bucket(NULL, copy_source_bucket_info, &cs_bucket);
- if (ret < 0)
- return ret;
-
- std::unique_ptr<rgw::sal::Object> cs_object =
- cs_bucket->get_object(rgw_obj_key(copy_source_object_name, copy_source_version_id));
-
+ auto cs_bucket = driver->get_bucket(nullptr, copy_source_bucket_info);
+ auto cs_object = cs_bucket->get_object(rgw_obj_key(copy_source_object_name,
+ copy_source_version_id));
cs_object->set_atomic();
cs_object->set_prefetch_data();
/* check source object permissions */
- if (ret = read_obj_policy(this, driver, s, copy_source_bucket_info, cs_attrs, &cs_acl, nullptr,
- policy, cs_bucket.get(), cs_object.get(), y, true); ret < 0) {
+ int ret = read_obj_policy(this, driver, s, copy_source_bucket_info, cs_attrs, &cs_acl, nullptr,
+ policy, cs_bucket.get(), cs_object.get(), y, true);
+ if (ret < 0) {
return ret;
}
return -EACCES;
}
- auto op_ret = get_params(y);
- if (op_ret < 0) {
- ldpp_dout(this, 20) << "get_params() returned ret=" << op_ret << dendl;
- return op_ret;
+ int ret = get_params(y);
+ if (ret < 0) {
+ ldpp_dout(this, 20) << "get_params() returned ret=" << ret << dendl;
+ return ret;
}
if (s->iam_policy || ! s->iam_user_policies.empty() || !s->session_policies.empty()) {
new_ofs = fst;
new_end = lst;
- std::unique_ptr<rgw::sal::Bucket> bucket;
- ret = driver->get_bucket(nullptr, copy_source_bucket_info, &bucket);
- if (ret < 0)
- return ret;
-
- std::unique_ptr<rgw::sal::Object> obj = bucket->get_object(rgw_obj_key(copy_source_object_name, copy_source_version_id));
- std::unique_ptr<rgw::sal::Object::ReadOp> read_op(obj->get_read_op());
+ auto bucket = driver->get_bucket(nullptr, copy_source_bucket_info);
+ auto obj = bucket->get_object(rgw_obj_key(copy_source_object_name,
+ copy_source_version_id));
+ auto read_op = obj->get_read_op();
ret = read_op->prepare(s->yield, this);
if (ret < 0)
return;
}
if ((! copy_source.empty()) && !copy_source_range) {
- std::unique_ptr<rgw::sal::Bucket> bucket;
- op_ret = driver->get_bucket(nullptr, copy_source_bucket_info, &bucket);
- if (op_ret < 0) {
- ldpp_dout(this, 0) << "ERROR: failed to get bucket with error" << op_ret << dendl;
- return;
- }
- std::unique_ptr<rgw::sal::Object> obj =
- bucket->get_object(rgw_obj_key(copy_source_object_name, copy_source_version_id));
+ auto bucket = driver->get_bucket(nullptr, copy_source_bucket_info);
+ auto obj = bucket->get_object(rgw_obj_key(copy_source_object_name,
+ copy_source_version_id));
RGWObjState *astate;
op_ret = obj->get_obj_state(this, &astate, s->yield);
return op_ret;
}
- op_ret = driver->get_bucket(this, s->user.get(),
- rgw_bucket_key(s->src_tenant_name,
- s->src_bucket_name),
- &src_bucket, y);
+ op_ret = driver->load_bucket(this, s->user.get(),
+ rgw_bucket_key(s->src_tenant_name,
+ s->src_bucket_name),
+ &src_bucket, y);
if (op_ret < 0) {
if (op_ret == -ENOENT) {
op_ret = -ERR_NO_SUCH_BUCKET;
ACLOwner bowner;
RGWObjVersionTracker ot;
- int ret = driver->get_bucket(dpp, s->user.get(), s->user->get_tenant(), path.bucket_name, &bucket, y);
- if (ret < 0) {
- goto binfo_fail;
- }
-
- ret = bucket->load_bucket(dpp, s->yield);
+ int ret = driver->load_bucket(dpp, s->user.get(), s->user->get_tenant(),
+ path.bucket_name, &bucket, y);
if (ret < 0) {
goto binfo_fail;
}
std::unique_ptr<rgw::sal::Bucket> bucket;
ACLOwner bowner;
- op_ret = driver->get_bucket(this, s->user.get(), rgw_bucket(rgw_bucket_key(s->user->get_tenant(), bucket_name)), &bucket, y);
+ op_ret = driver->load_bucket(this, s->user.get(), s->user->get_tenant(),
+ bucket_name, &bucket, y);
if (op_ret < 0) {
if (op_ret == -ENOENT) {
ldpp_dout(this, 20) << "non existent directory=" << bucket_name << dendl;
}
std::unique_ptr<rgw::sal::Bucket> cur_bucket;
- ret = store->get_bucket(dpp, nullptr, orphan_bucket, &cur_bucket, null_yield);
+ ret = store->load_bucket(dpp, nullptr, orphan_bucket, &cur_bucket, null_yield);
if (ret < 0) {
if (ret == -ENOENT) {
/* probably raced with bucket removal */
rgw_bucket b;
rgw_bucket_parse_bucket_key(store->ctx(), bucket_instance_id, &b, nullptr);
std::unique_ptr<rgw::sal::Bucket> bucket;
- ret = store->get_bucket(dpp, nullptr, b, &bucket, null_yield);
+ ret = store->load_bucket(dpp, nullptr, b, &bucket, null_yield);
if (ret < 0) {
if (ret == -ENOENT) {
/* probably raced with bucket removal */
continue;
}
- std::unique_ptr<rgw::sal::Bucket> bucket;
- store->get_bucket(nullptr, bucket_info, &bucket);
+ auto bucket = store->get_bucket(nullptr, bucket_info);
// we need to do this in two cases below, so use a lambda
auto do_stat_key =
[&](const rgw_obj_key& key) -> int {
bucket_process_map.erase(front);
std::unique_ptr<rgw::sal::Bucket> bucket;
- ret = store->get_bucket(dpp, nullptr, tenant_name, bucket_name, &bucket, null_yield);
+ ret = store->load_bucket(dpp, nullptr, tenant_name, bucket_name, &bucket, null_yield);
if (ret == -ENOENT) {
std::cerr << "WARNING: bucket " << bucket_name <<
" does not exist; could it have been deleted very recently?" <<
// initial bucket
std::unique_ptr<rgw::sal::Bucket> bucket;
- ret = store->get_bucket(dpp, nullptr, tenant_name, start_bucket_name, &bucket, null_yield);
+ ret = store->load_bucket(dpp, nullptr, tenant_name, start_bucket_name, &bucket, null_yield);
if (ret == -ENOENT) {
// bucket deletion race?
return 0;
std::unique_ptr<rgw::sal::Bucket> rbucket;
const DoutPrefix dp(driver->ctx(), dout_subsys, "rgw bucket async refresh handler: ");
- int r = driver->get_bucket(&dp, nullptr, bucket, &rbucket, null_yield);
+ int r = driver->load_bucket(&dp, nullptr, bucket, &rbucket, null_yield);
if (r < 0) {
ldpp_dout(&dp, 0) << "could not get bucket info for bucket=" << bucket << " r=" << r << dendl;
return r;
std::unique_ptr<rgw::sal::User> user = driver->get_user(_u);
std::unique_ptr<rgw::sal::Bucket> bucket;
- int r = driver->get_bucket(dpp, user.get(), _b, &bucket, y);
+ int r = driver->load_bucket(dpp, user.get(), _b, &bucket, y);
if (r < 0) {
ldpp_dout(dpp, 0) << "could not get bucket info for bucket=" << _b << " r=" << r << dendl;
return r;
std::unique_ptr<rgw::sal::User> user = driver->get_user(_u);
std::unique_ptr<rgw::sal::Bucket> bucket;
- int r = driver->get_bucket(dpp, user.get(), _b, &bucket, y);
+ int r = driver->load_bucket(dpp, user.get(), _b, &bucket, y);
if (r < 0) {
ldpp_dout(dpp, 0) << "could not get bucket info for bucket=" << _b << " r=" << r << dendl;
return r;
std::unique_ptr<rgw::sal::User> user = driver->get_user(s->owner.get_id());
std::unique_ptr<rgw::sal::Bucket> bucket;
- op_ret = driver->get_bucket(this, user.get(), s->bucket_tenant, s->bucket_name, &bucket, y);
+ op_ret = driver->load_bucket(this, user.get(), s->bucket_tenant, s->bucket_name, &bucket, y);
if (op_ret < 0) {
ldpp_dout(this, 1) << "failed to get bucket '" <<
(s->bucket_tenant.empty() ? s->bucket_name : s->bucket_tenant + ":" + s->bucket_name) <<
std::unique_ptr<rgw::sal::User> user = driver->get_user(s->owner.get_id());
std::unique_ptr<rgw::sal::Bucket> bucket;
- op_ret = driver->get_bucket(this, user.get(), s->bucket_tenant, s->bucket_name, &bucket, y);
+ op_ret = driver->load_bucket(this, user.get(), s->bucket_tenant, s->bucket_name, &bucket, y);
if (op_ret < 0) {
ldpp_dout(this, 1) << "failed to get bucket '" <<
(s->bucket_tenant.empty() ? s->bucket_name : s->bucket_tenant + ":" + s->bucket_name) <<
std::unique_ptr<rgw::sal::User> user = driver->get_user(s->owner.get_id());
std::unique_ptr<rgw::sal::Bucket> bucket;
- op_ret = driver->get_bucket(this, user.get(), s->bucket_tenant, s->bucket_name, &bucket, y);
+ op_ret = driver->load_bucket(this, user.get(), s->bucket_tenant, s->bucket_name, &bucket, y);
if (op_ret < 0) {
ldpp_dout(this, 1) << "failed to get bucket '" <<
(s->bucket_tenant.empty() ? s->bucket_name : s->bucket_tenant + ":" + s->bucket_name) <<
if (ratelimit_scope == "bucket" && !bucket_name.empty() && !global) {
std::unique_ptr<rgw::sal::Bucket> bucket;
- int r = driver->get_bucket(s, nullptr, tenant_name, bucket_name, &bucket, y);
+ int r = driver->load_bucket(s, nullptr, tenant_name, bucket_name, &bucket, y);
if (r != 0) {
op_ret = r;
ldpp_dout(this, 0) << "Error on getting bucket info" << dendl;
if (ratelimit_scope == "bucket" && !bucket_name.empty() && !global) {
ldpp_dout(this, 0) << "getting bucket info" << dendl;
std::unique_ptr<rgw::sal::Bucket> bucket;
- op_ret = driver->get_bucket(this, nullptr, tenant_name, bucket_name, &bucket, y);
+ op_ret = driver->load_bucket(this, nullptr, tenant_name, bucket_name, &bucket, y);
if (op_ret) {
ldpp_dout(this, 0) << "Error on getting bucket info" << dendl;
return;
std::unique_ptr<rgw::sal::Bucket> bucket;
if (bucket_name.compare(s->bucket->get_name()) != 0) {
- r = driver->get_bucket(s, s->user.get(), s->user->get_id().tenant, bucket_name, &bucket, s->yield);
+ r = driver->load_bucket(s, s->user.get(), s->user->get_id().tenant, bucket_name, &bucket, s->yield);
if (r < 0) {
ldpp_dout(this, 0) << "could not get bucket info for bucket="
<< bucket_name << dendl;
/* Need to get user info of bucket owner. */
std::unique_ptr<rgw::sal::Bucket> bucket;
- int ret = driver->get_bucket(s, user.get(), bucket_tenant, bucket_name, &bucket, s->yield);
+ int ret = driver->load_bucket(s, user.get(), bucket_tenant, bucket_name, &bucket, s->yield);
if (ret < 0) {
throw ret;
}
std::unique_ptr<rgw::sal::Bucket> bucket;
if (!bucket_name.empty()) {
- driver->get_bucket(nullptr, user.get(), std::string(), bucket_name, &bucket, null_yield);
+ op_ret = driver->load_bucket(nullptr, user.get(), std::string(), bucket_name, &bucket, null_yield);
+ if (op_ret < 0) {
+ return;
+ }
}
RESTArgs::get_epoch(s, "start", 0, &start);
std::unique_ptr<rgw::sal::Bucket> bucket;
if (!bucket_name.empty()) {
- driver->get_bucket(nullptr, user.get(), std::string(), bucket_name, &bucket, null_yield);
+ op_ret = driver->load_bucket(nullptr, user.get(), std::string(), bucket_name, &bucket, null_yield);
+ if (op_ret < 0) {
+ return;
+ }
}
RESTArgs::get_epoch(s, "start", 0, &start);
* there is a Bucket, otherwise use the get_object() in the Bucket class. */
virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) = 0;
/** Get a Bucket by info. Does not query the driver, just uses the give bucket info. */
- virtual int get_bucket(User* u, const RGWBucketInfo& i, std::unique_ptr<Bucket>* bucket) = 0;
- /** Lookup a Bucket by key. Queries driver for bucket info. */
- virtual int get_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y) = 0;
- /** Lookup a Bucket by name. Queries driver for bucket info. */
- virtual int get_bucket(const DoutPrefixProvider* dpp, User* u, const std::string& tenant, const std::string& name, std::unique_ptr<Bucket>* bucket, optional_yield y) = 0;
+ virtual std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i) = 0;
+ /** Load a Bucket by key. Queries driver for bucket info. On -ENOENT, the
+ * bucket must still be allocated to support bucket->create(). */
+ virtual int load_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b,
+ std::unique_ptr<Bucket>* bucket, optional_yield y) = 0;
+ /** Load a Bucket by name. Queries driver for bucket info. */
+ virtual int load_bucket(const DoutPrefixProvider* dpp, User* u,
+ const std::string& tenant, const std::string& name,
+ std::unique_ptr<Bucket>* bucket, optional_yield y) = 0;
/** For multisite, this driver is the zone's master */
virtual bool is_meta_master() = 0;
/** For multisite, forward an OP to the zone's master */
obj_version objv, *pobjv = NULL;
/* If it exists, look it up; otherwise create it */
- ret = store->get_bucket(dpp, this, b, &bucket, y);
+ ret = store->load_bucket(dpp, this, b, &bucket, y);
if (ret < 0 && ret != -ENOENT)
return ret;
}
- int DBStore::get_bucket(const DoutPrefixProvider *dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y)
+ std::unique_ptr<Bucket> DBStore::get_bucket(User* u, const RGWBucketInfo& i)
{
- int ret;
- Bucket* bp;
-
- bp = new DBBucket(this, b, u);
- ret = bp->load_bucket(dpp, y);
- if (ret < 0) {
- delete bp;
- return ret;
- }
-
- bucket->reset(bp);
- return 0;
+ /* Don't need to fetch the bucket info, use the provided one */
+ return std::make_unique<DBBucket>(this, i, u);
}
- int DBStore::get_bucket(User* u, const RGWBucketInfo& i, std::unique_ptr<Bucket>* bucket)
+ int DBStore::load_bucket(const DoutPrefixProvider *dpp, User* u, const rgw_bucket& b,
+ std::unique_ptr<Bucket>* bucket, optional_yield y)
{
- Bucket* bp;
-
- bp = new DBBucket(this, i, u);
- /* Don't need to fetch the bucket info, use the provided one */
-
- bucket->reset(bp);
- return 0;
+ *bucket = std::make_unique<DBBucket>(this, b, u);
+ return (*bucket)->load_bucket(dpp, y);
}
- int DBStore::get_bucket(const DoutPrefixProvider *dpp, User* u, const std::string& tenant, const std::string& name, std::unique_ptr<Bucket>* bucket, optional_yield y)
+ int DBStore::load_bucket(const DoutPrefixProvider *dpp, User* u,
+ const std::string& tenant, const std::string& name,
+ std::unique_ptr<Bucket>* bucket, optional_yield y)
{
rgw_bucket b;
b.tenant = tenant;
b.name = name;
- return get_bucket(dpp, u, b, bucket, y);
+ return load_bucket(dpp, u, b, bucket, y);
}
bool DBStore::is_meta_master()
virtual int get_user_by_swift(const DoutPrefixProvider *dpp, const std::string& user_str, optional_yield y, std::unique_ptr<User>* user) override;
virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
virtual std::string get_cluster_id(const DoutPrefixProvider* dpp, optional_yield y);
- virtual int get_bucket(const DoutPrefixProvider *dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y) override;
- virtual int get_bucket(User* u, const RGWBucketInfo& i, std::unique_ptr<Bucket>* bucket) override;
- virtual int get_bucket(const DoutPrefixProvider *dpp, User* u, const std::string& tenant, const std::string&name, std::unique_ptr<Bucket>* bucket, optional_yield y) override;
+ std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i) override;
+ int load_bucket(const DoutPrefixProvider *dpp, User* u, const rgw_bucket& b,
+ std::unique_ptr<Bucket>* bucket, optional_yield y) override;
+ int load_bucket(const DoutPrefixProvider *dpp, User* u,
+ const std::string& tenant, const std::string&name,
+ std::unique_ptr<Bucket>* bucket, optional_yield y) override;
virtual bool is_meta_master() override;
virtual int forward_request_to_master(const DoutPrefixProvider *dpp, User* user, obj_version* objv,
bufferlist& in_data, JSONParser *jp, req_info& info,
return std::make_unique<FilterObject>(std::move(o));
}
-int FilterDriver::get_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y)
+std::unique_ptr<Bucket> FilterDriver::get_bucket(User* u, const RGWBucketInfo& i)
{
- std::unique_ptr<Bucket> nb;
- int ret;
- User* nu = nextUser(u);
-
- ret = next->get_bucket(dpp, nu, b, &nb, y);
- if (ret != 0)
- return ret;
-
- Bucket* fb = new FilterBucket(std::move(nb), u);
- bucket->reset(fb);
- return 0;
+ return std::make_unique<FilterBucket>(next->get_bucket(nextUser(u), i), u);
}
-int FilterDriver::get_bucket(User* u, const RGWBucketInfo& i, std::unique_ptr<Bucket>* bucket)
+int FilterDriver::load_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y)
{
std::unique_ptr<Bucket> nb;
- int ret;
- User* nu = nextUser(u);
-
- ret = next->get_bucket(nu, i, &nb);
- if (ret != 0)
- return ret;
-
- Bucket* fb = new FilterBucket(std::move(nb), u);
- bucket->reset(fb);
- return 0;
+ const int ret = next->load_bucket(dpp, nextUser(u), b, &nb, y);
+ *bucket = std::make_unique<FilterBucket>(std::move(nb), u);
+ return ret;
}
-int FilterDriver::get_bucket(const DoutPrefixProvider* dpp, User* u, const std::string& tenant, const std::string& name, std::unique_ptr<Bucket>* bucket, optional_yield y)
+int FilterDriver::load_bucket(const DoutPrefixProvider* dpp, User* u,
+ const std::string& tenant, const std::string& name,
+ std::unique_ptr<Bucket>* bucket, optional_yield y)
{
std::unique_ptr<Bucket> nb;
- int ret;
- User* nu = nextUser(u);
-
- ret = next->get_bucket(dpp, nu, tenant, name, &nb, y);
- if (ret != 0)
- return ret;
-
- Bucket* fb = new FilterBucket(std::move(nb), u);
- bucket->reset(fb);
- return 0;
+ const int ret = next->load_bucket(dpp, nextUser(u), tenant, name, &nb, y);
+ *bucket = std::make_unique<FilterBucket>(std::move(nb), u);
+ return ret;
}
bool FilterDriver::is_meta_master()
std::string& user_str, optional_yield y,
std::unique_ptr<User>* user) override;
virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
- virtual int get_bucket(User* u, const RGWBucketInfo& i,
- std::unique_ptr<Bucket>* bucket) override;
- virtual int get_bucket(const DoutPrefixProvider* dpp, User* u, const
- rgw_bucket& b, std::unique_ptr<Bucket>* bucket,
- optional_yield y) override;
- virtual int get_bucket(const DoutPrefixProvider* dpp, User* u, const
- std::string& tenant, const std::string& name,
- std::unique_ptr<Bucket>* bucket, optional_yield y) override;
+ std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i) override;
+ int load_bucket(const DoutPrefixProvider* dpp, User* u, const
+ rgw_bucket& b, std::unique_ptr<Bucket>* bucket,
+ optional_yield y) override;
+ int load_bucket(const DoutPrefixProvider* dpp, User* u, const
+ std::string& tenant, const std::string& name,
+ std::unique_ptr<Bucket>* bucket, optional_yield y) override;
virtual bool is_meta_master() override;
virtual int forward_request_to_master(const DoutPrefixProvider *dpp, User* user,
obj_version* objv, bufferlist& in_data,
b.tenant = std::move(bucket_tenant);
b.name = std::move(bucket_name);
std::unique_ptr<rgw::sal::Bucket> bucket;
- int ret = driver->get_bucket(dpp, nullptr, b, &bucket, s->yield);
+ int ret = driver->load_bucket(dpp, nullptr, b, &bucket, s->yield);
if (ret < 0) {
throw ret;
}
for (auto& ent : listing.buckets) {
std::unique_ptr<rgw::sal::Bucket> bucket;
- ret = driver->get_bucket(dpp, user, ent.bucket, &bucket, y);
+ ret = driver->load_bucket(dpp, user, ent.bucket, &bucket, y);
if (ret < 0) {
ldpp_dout(dpp, 0) << "ERROR: could not read bucket info: bucket=" << bucket << " ret=" << ret << dendl;
continue;