Skip to content

Commit c7493fe

Browse files
authored
Merge pull request ceph#54379 from cbodley/wip-rgw-sal-bucket-owner
rgw/sal: Bucket owner as rgw_user Reviewed-by: Daniel Gryniewicz <[email protected]>
2 parents 7eb04ef + eb4cac7 commit c7493fe

37 files changed

+223
-390
lines changed

src/rgw/driver/d4n/rgw_sal_d4n.cc

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,6 @@ int D4NFilterObject::D4NFilterReadOp::prepare(optional_yield y, const DoutPrefix
326326
ldpp_dout(dpp, 20) << "D4N Filter: Cache get object operation failed." << dendl;
327327
} else {
328328
/* Set metadata locally */
329-
RGWQuotaInfo quota_info;
330329
RGWObjState* astate;
331330
source->get_obj_state(dpp, &astate, y);
332331

@@ -343,16 +342,9 @@ int D4NFilterObject::D4NFilterReadOp::prepare(optional_yield y, const DoutPrefix
343342
source->set_instance(it->second);
344343
} else if (!std::strcmp(it->first.data(), "source_zone_short_id")) {
345344
astate->zone_short_id = static_cast<uint32_t>(std::stoul(it->second));
346-
} else if (!std::strcmp(it->first.data(), "user_quota.max_size")) {
347-
quota_info.max_size = std::stoull(it->second);
348-
} else if (!std::strcmp(it->first.data(), "user_quota.max_objects")) {
349-
quota_info.max_objects = std::stoull(it->second);
350-
} else if (!std::strcmp(it->first.data(), "max_buckets")) {
351-
source->get_bucket()->get_owner()->set_max_buckets(std::stoull(it->second));
352345
}
353346
}
354347

355-
source->get_bucket()->get_owner()->set_info(quota_info);
356348
source->set_obj_state(*astate);
357349

358350
/* Set attributes locally */
@@ -491,19 +483,6 @@ int D4NFilterWriter::complete(size_t accounted_size, const std::string& etag,
491483
bl.clear();
492484
}
493485

494-
RGWUserInfo info = obj->get_bucket()->get_owner()->get_info();
495-
bl.append(std::to_string(info.quota.user_quota.max_size));
496-
baseAttrs.insert({"user_quota.max_size", bl});
497-
bl.clear();
498-
499-
bl.append(std::to_string(info.quota.user_quota.max_objects));
500-
baseAttrs.insert({"user_quota.max_objects", bl});
501-
bl.clear();
502-
503-
bl.append(std::to_string(obj->get_bucket()->get_owner()->get_max_buckets()));
504-
baseAttrs.insert({"max_buckets", bl});
505-
bl.clear();
506-
507486
baseAttrs.insert(attrs.begin(), attrs.end());
508487

509488
int setObjReturn = filter->get_d4n_cache()->setObject(obj->get_key().get_oid(), &baseAttrs);

src/rgw/driver/d4n/rgw_sal_d4n.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ class D4NFilterBucket : public FilterBucket {
7878
D4NFilterDriver* filter;
7979

8080
public:
81-
D4NFilterBucket(std::unique_ptr<Bucket> _next, User* _user, D4NFilterDriver* _filter) :
82-
FilterBucket(std::move(_next), _user),
81+
D4NFilterBucket(std::unique_ptr<Bucket> _next, D4NFilterDriver* _filter) :
82+
FilterBucket(std::move(_next)),
8383
filter(_filter) {}
8484
virtual ~D4NFilterBucket() = default;
8585

src/rgw/driver/posix/rgw_sal_posix.cc

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -348,16 +348,16 @@ std::unique_ptr<Object> POSIXDriver::get_object(const rgw_obj_key& k)
348348
return std::make_unique<POSIXObject>(this, k);
349349
}
350350

351-
int POSIXDriver::load_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y)
351+
int POSIXDriver::load_bucket(const DoutPrefixProvider* dpp, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y)
352352
{
353-
*bucket = std::make_unique<POSIXBucket>(this, root_fd, b, u);
353+
*bucket = std::make_unique<POSIXBucket>(this, root_fd, b);
354354
return (*bucket)->load_bucket(dpp, y);
355355
}
356356

357-
std::unique_ptr<Bucket> POSIXDriver::get_bucket(User* u, const RGWBucketInfo& i)
357+
std::unique_ptr<Bucket> POSIXDriver::get_bucket(const RGWBucketInfo& i)
358358
{
359359
/* Don't need to fetch the bucket info, use the provided one */
360-
return std::make_unique<POSIXBucket>(this, root_fd, i, u);
360+
return std::make_unique<POSIXBucket>(this, root_fd, i);
361361
}
362362

363363
std::string POSIXDriver::zone_unique_trans_id(const uint64_t unique_num)
@@ -525,8 +525,7 @@ int POSIXBucket::create(const DoutPrefixProvider* dpp,
525525
const CreateParams& params,
526526
optional_yield y)
527527
{
528-
ceph_assert(owner);
529-
info.owner = owner->get_id();
528+
info.owner = params.owner;
530529

531530
info.bucket.marker = params.marker;
532531
info.bucket.bucket_id = params.bucket_id;
@@ -632,7 +631,7 @@ int POSIXDriver::mint_listing_entry(const std::string &bname,
632631
POSIXObject *pobj;
633632
int ret;
634633

635-
ret = load_bucket(nullptr, nullptr, rgw_bucket(std::string(), bname),
634+
ret = load_bucket(nullptr, rgw_bucket(std::string(), bname),
636635
&b, null_yield);
637636
if (ret < 0)
638637
return ret;
@@ -883,10 +882,6 @@ int POSIXBucket::load_bucket(const DoutPrefixProvider* dpp, optional_yield y)
883882
mtime = ceph::real_clock::from_time_t(stx.stx_mtime.tv_sec);
884883
info.creation_time = ceph::real_clock::from_time_t(stx.stx_btime.tv_sec);
885884

886-
if (owner) {
887-
info.owner = owner->get_id();
888-
}
889-
890885
ret = open(dpp);
891886
if (ret < 0) {
892887
return ret;
@@ -981,7 +976,7 @@ int POSIXBucket::check_bucket_shards(const DoutPrefixProvider* dpp,
981976
return 0;
982977
}
983978

984-
int POSIXBucket::chown(const DoutPrefixProvider* dpp, User& new_user, optional_yield y)
979+
int POSIXBucket::chown(const DoutPrefixProvider* dpp, const rgw_user& new_owner, optional_yield y)
985980
{
986981
/* TODO map user to UID/GID, and change it */
987982
return 0;
@@ -1204,7 +1199,7 @@ int POSIXBucket::get_shadow_bucket(const DoutPrefixProvider* dpp, optional_yield
12041199

12051200
open(dpp);
12061201

1207-
bp = new POSIXBucket(driver, dir_fd, b, owner, ons);
1202+
bp = new POSIXBucket(driver, dir_fd, b, ons);
12081203
ret = bp->load_bucket(dpp, y);
12091204
if (ret == -ENOENT && create) {
12101205
/* Create it if it doesn't exist */

src/rgw/driver/posix/rgw_sal_posix.h

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,9 @@ class POSIXDriver : public FilterDriver {
5252
std::string& user_str, optional_yield y,
5353
std::unique_ptr<User>* user) override;
5454
virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
55-
virtual std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i) override;
56-
virtual int load_bucket(const DoutPrefixProvider* dpp, User* u, const
57-
rgw_bucket& b, std::unique_ptr<Bucket>* bucket,
58-
optional_yield y) override;
55+
virtual std::unique_ptr<Bucket> get_bucket(const RGWBucketInfo& i) override;
56+
virtual int load_bucket(const DoutPrefixProvider* dpp, const rgw_bucket& b,
57+
std::unique_ptr<Bucket>* bucket, optional_yield y) override;
5958
virtual std::string zone_unique_trans_id(const uint64_t unique_num) override;
6059

6160
virtual std::unique_ptr<Writer> get_append_writer(const DoutPrefixProvider *dpp,
@@ -143,16 +142,16 @@ class POSIXBucket : public StoreBucket {
143142
std::optional<std::string> ns;
144143

145144
public:
146-
POSIXBucket(POSIXDriver *_dr, int _p_fd, const rgw_bucket& _b, User* _u, std::optional<std::string> _ns = std::nullopt)
147-
: StoreBucket(_b, _u),
145+
POSIXBucket(POSIXDriver *_dr, int _p_fd, const rgw_bucket& _b, std::optional<std::string> _ns = std::nullopt)
146+
: StoreBucket(_b),
148147
driver(_dr),
149148
parent_fd(_p_fd),
150149
acls(),
151150
ns(_ns)
152151
{ }
153152

154-
POSIXBucket(POSIXDriver *_dr, int _p_fd, const RGWBucketInfo& _i, User* _u)
155-
: StoreBucket(_i, _u),
153+
POSIXBucket(POSIXDriver *_dr, int _p_fd, const RGWBucketInfo& _i)
154+
: StoreBucket(_i),
156155
driver(_dr),
157156
parent_fd(_p_fd),
158157
acls()
@@ -201,7 +200,7 @@ class POSIXBucket : public StoreBucket {
201200
RGWBucketEnt* ent) override;
202201
virtual int check_bucket_shards(const DoutPrefixProvider* dpp,
203202
uint64_t num_objs, optional_yield y) override;
204-
virtual int chown(const DoutPrefixProvider* dpp, User& new_user, optional_yield y) override;
203+
virtual int chown(const DoutPrefixProvider* dpp, const rgw_user& new_owner, optional_yield y) override;
205204
virtual int put_info(const DoutPrefixProvider* dpp, bool exclusive,
206205
ceph::real_time mtime, optional_yield y) override;
207206
virtual int check_empty(const DoutPrefixProvider* dpp, optional_yield y) override;

src/rgw/driver/rados/rgw_bucket.cc

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,7 @@ void check_bad_user_bucket_mapping(rgw::sal::Driver* driver, rgw::sal::User& use
109109

110110
for (const auto& ent : listing.buckets) {
111111
std::unique_ptr<rgw::sal::Bucket> bucket;
112-
int r = driver->load_bucket(dpp, &user,
113-
rgw_bucket(user.get_tenant(), ent.bucket.name),
112+
int r = driver->load_bucket(dpp, rgw_bucket(user.get_tenant(), ent.bucket.name),
114113
&bucket, y);
115114
if (r < 0) {
116115
ldpp_dout(dpp, 0) << "could not get bucket info for bucket=" << bucket << dendl;
@@ -122,7 +121,7 @@ void check_bad_user_bucket_mapping(rgw::sal::Driver* driver, rgw::sal::User& use
122121
<< " got " << bucket << std::endl;
123122
if (fix) {
124123
cout << "fixing" << std::endl;
125-
r = bucket->chown(dpp, user, y);
124+
r = bucket->chown(dpp, user.get_id(), y);
126125
if (r < 0) {
127126
cerr << "failed to fix bucket: " << cpp_strerror(-r) << std::endl;
128127
}
@@ -183,7 +182,7 @@ int RGWBucket::init(rgw::sal::Driver* _driver, RGWBucketAdminOpState& op_state,
183182
bucket_name = bucket_name.substr(pos + 1);
184183
}
185184

186-
int r = driver->load_bucket(dpp, user.get(), rgw_bucket(tenant, bucket_name),
185+
int r = driver->load_bucket(dpp, rgw_bucket(tenant, bucket_name),
187186
&bucket, y);
188187
if (r < 0) {
189188
set_err_msg(err_msg, "failed to fetch bucket info for bucket=" + bucket_name);
@@ -246,11 +245,6 @@ bool rgw_find_bucket_by_id(const DoutPrefixProvider *dpp, CephContext *cct, rgw:
246245
int RGWBucket::chown(RGWBucketAdminOpState& op_state, const string& marker,
247246
optional_yield y, const DoutPrefixProvider *dpp, std::string *err_msg)
248247
{
249-
/* User passed in by rgw_admin is the new user; get the current user and set it in
250-
* the bucket */
251-
std::unique_ptr<rgw::sal::User> old_user = driver->get_user(bucket->get_info().owner);
252-
bucket->set_owner(old_user.get());
253-
254248
return rgw_chown_bucket_and_objects(driver, bucket.get(), user.get(), marker, err_msg, dpp, y);
255249
}
256250

@@ -1243,11 +1237,9 @@ int RGWBucketAdminOp::remove_bucket(rgw::sal::Driver* driver, RGWBucketAdminOpSt
12431237
bool bypass_gc, bool keep_index_consistent)
12441238
{
12451239
std::unique_ptr<rgw::sal::Bucket> bucket;
1246-
std::unique_ptr<rgw::sal::User> user = driver->get_user(op_state.get_user_id());
12471240

1248-
int ret = driver->load_bucket(dpp, user.get(),
1249-
rgw_bucket(user->get_tenant(),
1250-
op_state.get_bucket_name()),
1241+
int ret = driver->load_bucket(dpp, rgw_bucket(op_state.get_tenant(),
1242+
op_state.get_bucket_name()),
12511243
&bucket, y);
12521244
if (ret < 0)
12531245
return ret;
@@ -1289,8 +1281,7 @@ static int bucket_stats(rgw::sal::Driver* driver,
12891281
std::unique_ptr<rgw::sal::Bucket> bucket;
12901282
map<RGWObjCategory, RGWStorageStats> stats;
12911283

1292-
int ret = driver->load_bucket(dpp, nullptr,
1293-
rgw_bucket(tenant_name, bucket_name),
1284+
int ret = driver->load_bucket(dpp, rgw_bucket(tenant_name, bucket_name),
12941285
&bucket, y);
12951286
if (ret < 0) {
12961287
return ret;
@@ -1416,7 +1407,7 @@ int RGWBucketAdminOp::limit_check(rgw::sal::Driver* driver,
14161407
uint64_t num_objects = 0;
14171408

14181409
std::unique_ptr<rgw::sal::Bucket> bucket;
1419-
ret = driver->load_bucket(dpp, user.get(), ent.bucket, &bucket, y);
1410+
ret = driver->load_bucket(dpp, ent.bucket, &bucket, y);
14201411
if (ret < 0)
14211412
continue;
14221413

@@ -1600,7 +1591,7 @@ void get_stale_instances(rgw::sal::Driver* driver, const std::string& bucket_nam
16001591
std::unique_ptr<rgw::sal::Bucket> bucket;
16011592
rgw_bucket rbucket;
16021593
rgw_bucket_parse_bucket_key(driver->ctx(), bucket_instance, &rbucket, nullptr);
1603-
int r = driver->load_bucket(dpp, nullptr, rbucket, &bucket, y);
1594+
int r = driver->load_bucket(dpp, rbucket, &bucket, y);
16041595
if (r < 0){
16051596
// this can only happen if someone deletes us right when we're processing
16061597
ldpp_dout(dpp, -1) << "Bucket instance is invalid: " << bucket_instance
@@ -1620,7 +1611,7 @@ void get_stale_instances(rgw::sal::Driver* driver, const std::string& bucket_nam
16201611
auto [tenant, bname] = split_tenant(bucket_name);
16211612
RGWBucketInfo cur_bucket_info;
16221613
std::unique_ptr<rgw::sal::Bucket> cur_bucket;
1623-
int r = driver->load_bucket(dpp, nullptr, rgw_bucket(tenant, bname),
1614+
int r = driver->load_bucket(dpp, rgw_bucket(tenant, bname),
16241615
&cur_bucket, y);
16251616
if (r < 0) {
16261617
if (r == -ENOENT) {
@@ -1755,7 +1746,7 @@ int RGWBucketAdminOp::clear_stale_instances(rgw::sal::Driver* driver,
17551746
Formatter *formatter,
17561747
rgw::sal::Driver* driver){
17571748
for (const auto &binfo: lst) {
1758-
auto bucket = driver->get_bucket(nullptr, binfo);
1749+
auto bucket = driver->get_bucket(binfo);
17591750
int ret = bucket->purge_instance(dpp, y);
17601751
if (ret == 0){
17611752
auto md_key = "bucket.instance:" + binfo.bucket.get_key();
@@ -1777,8 +1768,7 @@ static int fix_single_bucket_lc(rgw::sal::Driver* driver,
17771768
const DoutPrefixProvider *dpp, optional_yield y)
17781769
{
17791770
std::unique_ptr<rgw::sal::Bucket> bucket;
1780-
int ret = driver->load_bucket(dpp, nullptr,
1781-
rgw_bucket(tenant_name, bucket_name),
1771+
int ret = driver->load_bucket(dpp, rgw_bucket(tenant_name, bucket_name),
17821772
&bucket, y);
17831773
if (ret < 0) {
17841774
// TODO: Should we handle the case where the bucket could've been removed between
@@ -1949,7 +1939,7 @@ int RGWBucketAdminOp::fix_obj_expiry(rgw::sal::Driver* driver,
19491939
ldpp_dout(dpp, -1) << "failed to initialize bucket" << dendl;
19501940
return ret;
19511941
}
1952-
auto bucket = driver->get_bucket(nullptr, admin_bucket.get_bucket_info());
1942+
auto bucket = driver->get_bucket(admin_bucket.get_bucket_info());
19531943

19541944
return fix_bucket_obj_expiry(dpp, driver, bucket.get(), flusher, dry_run, y);
19551945
}
@@ -2630,7 +2620,7 @@ int RGWMetadataHandlerPut_BucketInstance::put_post(const DoutPrefixProvider *dpp
26302620

26312621
/* update lifecyle policy */
26322622
{
2633-
auto bucket = bihandler->driver->get_bucket(nullptr, bci.info);
2623+
auto bucket = bihandler->driver->get_bucket(bci.info);
26342624

26352625
auto lc = bihandler->driver->get_rgwlc();
26362626

src/rgw/driver/rados/rgw_cr_rados.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1350,7 +1350,7 @@ class RGWAsyncRemoveObj : public RGWAsyncRadosRequest {
13501350
if (_zones_trace) {
13511351
zones_trace = *_zones_trace;
13521352
}
1353-
bucket = store->get_bucket(nullptr, _bucket_info);
1353+
bucket = store->get_bucket(_bucket_info);
13541354
obj = bucket->get_object(_key);
13551355
}
13561356
};

src/rgw/driver/rados/rgw_cr_tools.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,7 @@ int RGWGetUserInfoCR::Request::_send_request(const DoutPrefixProvider *dpp)
100100
template<>
101101
int RGWGetBucketInfoCR::Request::_send_request(const DoutPrefixProvider *dpp)
102102
{
103-
return store->load_bucket(dpp, nullptr,
104-
rgw_bucket(params.tenant, params.bucket_name),
103+
return store->load_bucket(dpp, rgw_bucket(params.tenant, params.bucket_name),
105104
&result->bucket, null_yield);
106105
}
107106

src/rgw/driver/rados/rgw_notify.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -873,8 +873,7 @@ static inline void populate_event(reservation_t& res,
873873
event.x_amz_id_2 = res.store->getRados()->host_id; // RGW on which the change was made
874874
// configurationId is filled from notification configuration
875875
event.bucket_name = res.bucket->get_name();
876-
event.bucket_ownerIdentity = res.bucket->get_owner() ?
877-
res.bucket->get_owner()->get_id().id : res.bucket->get_info().owner.id;
876+
event.bucket_ownerIdentity = res.bucket->get_owner().id;
878877
const auto region = res.store->get_zone()->get_zonegroup().get_api_name();
879878
rgw::ARN bucket_arn(res.bucket->get_key());
880879
bucket_arn.region = region;

src/rgw/driver/rados/rgw_object_expirer_core.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ int RGWObjectExpirer::garbage_single_object(const DoutPrefixProvider *dpp, objex
201201
RGWBucketInfo bucket_info;
202202
std::unique_ptr<rgw::sal::Bucket> bucket;
203203

204-
int ret = driver->load_bucket(dpp, nullptr, rgw_bucket(hint.tenant, hint.bucket_name, hint.bucket_id), &bucket, null_yield);
204+
int ret = driver->load_bucket(dpp, rgw_bucket(hint.tenant, hint.bucket_name, hint.bucket_id), &bucket, null_yield);
205205
if (-ENOENT == ret) {
206206
ldpp_dout(dpp, 15) << "NOTICE: cannot find bucket = " \
207207
<< hint.bucket_name << ". The object must be already removed" << dendl;

src/rgw/driver/rados/rgw_rest_bucket.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ void RGWOp_Bucket_Remove::execute(optional_yield y)
233233
return;
234234
}
235235

236-
op_ret = driver->load_bucket(s, nullptr, rgw_bucket("", bucket_name),
236+
op_ret = driver->load_bucket(s, rgw_bucket("", bucket_name),
237237
&bucket, y);
238238
if (op_ret < 0) {
239239
ldpp_dout(this, 0) << "get_bucket returned ret=" << op_ret << dendl;
@@ -301,7 +301,7 @@ void RGWOp_Set_Bucket_Quota::execute(optional_yield y)
301301
}
302302
if (use_http_params) {
303303
std::unique_ptr<rgw::sal::Bucket> bucket;
304-
op_ret = driver->load_bucket(s, nullptr, rgw_bucket(uid.tenant, bucket_name),
304+
op_ret = driver->load_bucket(s, rgw_bucket(uid.tenant, bucket_name),
305305
&bucket, s->yield);
306306
if (op_ret < 0) {
307307
return;

0 commit comments

Comments
 (0)