const DoutPrefixProvider *dpp)
{
RGWRoleCompleteInfo rci;
- RGWObjVersionTracker objv_tracker;
- real_time mtime;
-
#if 0
int ret = svc.role->read_info(op->ctx(),
entry,
return ret;
}
+ RGWObjVersionTracker objv_tracker = rci.info->get_objv_tracker();
+ real_time mtime = rci.info->get_mtime();
+
RGWRoleMetadataObject *rdo = new RGWRoleMetadataObject(rci, objv_tracker.read_version,
mtime);
*obj = rdo;
int put_checked(const DoutPrefixProvider *dpp) override {
auto& rci = mdo->get_rci();
auto mtime = mdo->get_mtime();
- map<std::string, bufferlist> *pattrs = rci.has_attrs ? &rci.attrs : nullptr;
#if 0
int ret = rhandler->role->create(op->ctx(),
rci.info,
return ret < 0 ? ret : STATUS_APPLIED;
#endif
+ rci.info->set_mtime(mtime);
int ret = rci.info->create(dpp, true, y);
return ret < 0 ? ret : STATUS_APPLIED;
}
std::string tenant;
uint64_t max_session_duration;
std::multimap<std::string,std::string> tags;
+ std::map<std::string, bufferlist> attrs;
+ RGWObjVersionTracker objv_tracker;
+ real_time mtime;
public:
virtual int store_info(const DoutPrefixProvider *dpp, bool exclusive, optional_yield y) = 0;
} else {
max_session_duration = std::stoull(max_session_duration_str);
}
+ mtime = real_time();
}
RGWRole(std::string id) : id(std::move(id)) {}
const std::string& get_create_date() const { return creation_date; }
const std::string& get_assume_role_policy() const { return trust_policy;}
const uint64_t& get_max_session_duration() const { return max_session_duration; }
+ const RGWObjVersionTracker& get_objv_tracker() const { return objv_tracker; }
+ const real_time& get_mtime() const { return mtime; }
void set_id(const std::string& id) { this->id = id; }
//TODO: Remove the following two
void set_arn(const std::string& arn) { this->arn = arn; }
void set_creation_date(const std::string& creation_date) { this->creation_date = creation_date; }
+ void set_mtime(const real_time& mtime) { this->mtime = mtime; }
virtual int create(const DoutPrefixProvider *dpp, bool exclusive, optional_yield y) = 0;
virtual int delete_obj(const DoutPrefixProvider *dpp, optional_yield y) = 0;
if (!this->tags.empty()) {
bufferlist bl_tags;
encode(this->tags, bl_tags);
- map<string, bufferlist> attrs;
attrs.emplace("tagging", bl_tags);
- return rgw_put_system_obj(dpp, obj_ctx, store->get_zone()->get_params().roles_pool, oid, bl, exclusive, nullptr, real_time(), y, &attrs);
}
- return rgw_put_system_obj(dpp, obj_ctx, store->get_zone()->get_params().roles_pool, oid, bl, exclusive, nullptr, real_time(), y);
+ if (!attrs.empty()) {
+ return rgw_put_system_obj(dpp, obj_ctx, store->get_zone()->get_params().roles_pool, oid, bl, exclusive, nullptr, mtime, y, &attrs);
+ }
+
+ return rgw_put_system_obj(dpp, obj_ctx, store->get_zone()->get_params().roles_pool, oid, bl, exclusive, nullptr, mtime, y);
}
int RadosRole::store_name(const DoutPrefixProvider *dpp, bool exclusive, optional_yield y)
std::string oid = get_info_oid_prefix() + id;
bufferlist bl;
- map<string, bufferlist> attrs;
- int ret = rgw_get_system_obj(obj_ctx, store->get_zone()->get_params().roles_pool, oid, bl, nullptr, nullptr, null_yield, dpp, &attrs, nullptr, boost::none, true);
+ int ret = rgw_get_system_obj(obj_ctx, store->get_zone()->get_params().roles_pool, oid, bl, &objv_tracker, &mtime, null_yield, dpp, &attrs, nullptr, boost::none, true);
if (ret < 0) {
ldpp_dout(dpp, 0) << "ERROR: failed reading role info from Role pool: " << id << ": " << cpp_strerror(-ret) << dendl;
return ret;