std::optional<RGWUserPermHandler> user_perms;
RGWUserPermHandler::Bucket dest_bucket_perms;
- if (params.user.empty()) {
+ if (!params.user.has_value()) {
ldpp_dout(dpp, 20) << "ERROR: " << __func__ << ": user level sync but user param not set" << dendl;
return -EPERM;
}
- user_perms.emplace(dpp, store, dpp->get_cct(), params.user);
+ user_perms.emplace(dpp, store, dpp->get_cct(), *params.user);
ret = user_perms->init();
if (ret < 0) {
- ldpp_dout(dpp, 0) << "ERROR: " << __func__ << ": failed to init user perms for uid=" << params.user << " ret=" << ret << dendl;
+ ldpp_dout(dpp, 0) << "ERROR: " << __func__ << ": failed to init user perms for uid=" << *params.user << " ret=" << ret << dendl;
return ret;
}
ret = user_perms->init_bucket(sync_pipe.dest_bucket_info, sync_pipe.dest_bucket_attrs, &dest_bucket_perms);
if (ret < 0) {
- ldpp_dout(dpp, 0) << "ERROR: " << __func__ << ": failed to init bucket perms for uid=" << params.user << " bucket=" << bucket->get_key() << " ret=" << ret << dendl;
+ ldpp_dout(dpp, 0) << "ERROR: " << __func__ << ": failed to init bucket perms for uid=" << *params.user << " bucket=" << bucket->get_key() << " ret=" << ret << dendl;
return ret;
}
if (!rgw::sal::User::empty(user)) {
pipe->params.user = user->get_id();
} else if (pipe->params.mode == rgw_sync_pipe_params::MODE_USER &&
- pipe->params.user.empty()) {
+ !pipe->params.user.has_value()) {
cerr << "ERROR: missing --uid for --mode=user" << std::endl;
return EINVAL;
}
s = "user";
}
encode_json("mode", s, f);
- encode_json("user", user, f);
+ if (user) {
+ encode_json("user", *user, f);
+ }
}
void rgw_sync_pipe_params::decode_json(JSONObj *obj)
MODE_USER = 1,
} mode{MODE_SYSTEM};
int32_t priority{0};
- rgw_user user;
+ std::optional<rgw_user> user;
void encode(bufferlist& bl) const {
ENCODE_START(1, 1, bl);
encode(dest, bl);
encode(priority, bl);
encode((uint8_t)mode, bl);
- encode(user, bl);
+ encode(user.value_or(rgw_user()), bl);
ENCODE_FINISH(bl);
}
uint8_t m;
decode(m, bl);
mode = (Mode)m;
- decode(user, bl);
+ { // decode user
+ rgw_user _user;
+ decode(_user, bl);
+ if (!_user.empty()) {
+ user = _user;
+ }
+ }
DECODE_FINISH(bl);
}