Skip to content

Commit 520ac01

Browse files
clwluvwcbodley
authored andcommitted
rgw: make rgw_sync_pipe_params::user optional
In rgw_sync_pipe_params, the mode can be either system or user. When in system mode, no user is involved, but the current implementation holds an empty rgw_user, which can cause confusion in pipe_rules::find_basic_info_without_tags(). With this change, rgw_user is now optional, ensuring that when no user is involved, it is explicitly nullopt rather than an empty object. Signed-off-by: Seena Fallah <[email protected]> (cherry picked from commit c8aca21)
1 parent e704129 commit 520ac01

File tree

4 files changed

+17
-9
lines changed

4 files changed

+17
-9
lines changed

src/rgw/driver/rados/rgw_cr_rados.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -950,21 +950,21 @@ int RGWAsyncRemoveObj::_send_request(const DoutPrefixProvider *dpp)
950950
std::optional<RGWUserPermHandler> user_perms;
951951
RGWUserPermHandler::Bucket dest_bucket_perms;
952952

953-
if (params.user.empty()) {
953+
if (!params.user.has_value()) {
954954
ldpp_dout(dpp, 20) << "ERROR: " << __func__ << ": user level sync but user param not set" << dendl;
955955
return -EPERM;
956956
}
957-
user_perms.emplace(dpp, store, dpp->get_cct(), params.user);
957+
user_perms.emplace(dpp, store, dpp->get_cct(), *params.user);
958958

959959
ret = user_perms->init();
960960
if (ret < 0) {
961-
ldpp_dout(dpp, 0) << "ERROR: " << __func__ << ": failed to init user perms for uid=" << params.user << " ret=" << ret << dendl;
961+
ldpp_dout(dpp, 0) << "ERROR: " << __func__ << ": failed to init user perms for uid=" << *params.user << " ret=" << ret << dendl;
962962
return ret;
963963
}
964964

965965
ret = user_perms->init_bucket(sync_pipe.dest_bucket_info, sync_pipe.dest_bucket_attrs, &dest_bucket_perms);
966966
if (ret < 0) {
967-
ldpp_dout(dpp, 0) << "ERROR: " << __func__ << ": failed to init bucket perms for uid=" << params.user << " bucket=" << bucket->get_key() << " ret=" << ret << dendl;
967+
ldpp_dout(dpp, 0) << "ERROR: " << __func__ << ": failed to init bucket perms for uid=" << *params.user << " bucket=" << bucket->get_key() << " ret=" << ret << dendl;
968968
return ret;
969969
}
970970

src/rgw/radosgw-admin/radosgw-admin.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10716,7 +10716,7 @@ int main(int argc, const char **argv)
1071610716
if (!rgw::sal::User::empty(user)) {
1071710717
pipe->params.user = user->get_id();
1071810718
} else if (pipe->params.mode == rgw_sync_pipe_params::MODE_USER &&
10719-
pipe->params.user.empty()) {
10719+
!pipe->params.user.has_value()) {
1072010720
cerr << "ERROR: missing --uid for --mode=user" << std::endl;
1072110721
return EINVAL;
1072210722
}

src/rgw/rgw_sync_policy.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,9 @@ void rgw_sync_pipe_params::dump(Formatter *f) const
635635
s = "user";
636636
}
637637
encode_json("mode", s, f);
638-
encode_json("user", user, f);
638+
if (user) {
639+
encode_json("user", *user, f);
640+
}
639641
}
640642

641643
void rgw_sync_pipe_params::decode_json(JSONObj *obj)

src/rgw/rgw_sync_policy.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -342,15 +342,15 @@ struct rgw_sync_pipe_params {
342342
MODE_USER = 1,
343343
} mode{MODE_SYSTEM};
344344
int32_t priority{0};
345-
rgw_user user;
345+
std::optional<rgw_user> user;
346346

347347
void encode(bufferlist& bl) const {
348348
ENCODE_START(1, 1, bl);
349349
encode(source, bl);
350350
encode(dest, bl);
351351
encode(priority, bl);
352352
encode((uint8_t)mode, bl);
353-
encode(user, bl);
353+
encode(user.value_or(rgw_user()), bl);
354354
ENCODE_FINISH(bl);
355355
}
356356

@@ -362,7 +362,13 @@ struct rgw_sync_pipe_params {
362362
uint8_t m;
363363
decode(m, bl);
364364
mode = (Mode)m;
365-
decode(user, bl);
365+
{ // decode user
366+
rgw_user _user;
367+
decode(_user, bl);
368+
if (!_user.empty()) {
369+
user = _user;
370+
}
371+
}
366372
DECODE_FINISH(bl);
367373
}
368374

0 commit comments

Comments
 (0)