return 0;
}
-int RGWSI_Cls::MFA::get_mfa_obj(const DoutPrefixProvider *dpp, const rgw_user& user, std::optional<RGWSI_RADOS::Obj> *obj)
-{
- string oid = get_mfa_oid(user);
- rgw_raw_obj o(zone_svc->get_zone_params().otp_pool, oid);
-
- obj->emplace(rados_svc->obj(o));
- int r = (*obj)->open(dpp);
- if (r < 0) {
- ldpp_dout(dpp, 4) << "failed to open rados context for " << o << dendl;
- return r;
- }
-
- return 0;
-}
-
int RGWSI_Cls::MFA::get_mfa_ref(const DoutPrefixProvider *dpp, const rgw_user& user, rgw_rados_ref *ref)
{
string oid = get_mfa_oid(user);
- rgw_raw_obj o(zone_svc->get_zone_params().otp_pool, oid);
+ rgw_raw_obj o(cls->zone_svc->get_zone_params().otp_pool, oid);
- auto r = rgw_get_rados_ref(dpp, rados_svc->get_rados_handle(), o, ref);
+ auto r = rgw_get_rados_ref(dpp, cls->rados, o, ref);
if (r < 0) {
ldpp_dout(dpp, 4) << "failed to open rados context for " << o << dendl;
return r;
int RGWSI_Cls::MFA::create_mfa(const DoutPrefixProvider *dpp, const rgw_user& user, const rados::cls::otp::otp_info_t& config,
RGWObjVersionTracker *objv_tracker, const ceph::real_time& mtime, optional_yield y)
{
- std::optional<RGWSI_RADOS::Obj> obj;
- int r = get_mfa_obj(dpp, user, &obj);
+ rgw_rados_ref obj;
+ int r = get_mfa_ref(dpp, user, &obj);
if (r < 0) {
return r;
}
librados::ObjectWriteOperation op;
prepare_mfa_write(&op, objv_tracker, mtime);
rados::cls::otp::OTP::create(&op, config);
- r = obj->operate(dpp, &op, y);
+ r = obj.operate(dpp, &op, y);
if (r < 0) {
ldpp_dout(dpp, 20) << "OTP create, otp_id=" << config.id << " result=" << (int)r << dendl;
return r;
const ceph::real_time& mtime,
optional_yield y)
{
- std::optional<RGWSI_RADOS::Obj> obj;
- int r = get_mfa_obj(dpp, user, &obj);
+ rgw_rados_ref obj;
+ int r = get_mfa_ref(dpp, user, &obj);
if (r < 0) {
return r;
}
librados::ObjectWriteOperation op;
prepare_mfa_write(&op, objv_tracker, mtime);
rados::cls::otp::OTP::remove(&op, id);
- r = obj->operate(dpp, &op, y);
+ r = obj.operate(dpp, &op, y);
if (r < 0) {
ldpp_dout(dpp, 20) << "OTP remove, otp_id=" << id << " result=" << (int)r << dendl;
return r;
const real_time& mtime,
optional_yield y)
{
- rgw_raw_obj o(zone_svc->get_zone_params().otp_pool, oid);
- auto obj = rados_svc->obj(o);
- int r = obj.open(dpp);
+ rgw_rados_ref obj;
+ int r = rgw_get_rados_ref(dpp, cls->rados,
+ { cls->zone_svc->get_zone_params().otp_pool, oid },
+ &obj);
if (r < 0) {
- ldpp_dout(dpp, 4) << "failed to open rados context for " << o << dendl;
+ ldpp_dout(dpp, 4) << "failed to open rados context for " << oid << dendl;
return r;
}
librados::ObjectWriteOperation op;
RGWObjVersionTracker *objv_tracker, ceph::real_time *pmtime,
optional_yield y)
{
- rgw_raw_obj o(zone_svc->get_zone_params().otp_pool, oid);
- auto obj = rados_svc->obj(o);
- int r = obj.open(dpp);
+ rgw_rados_ref ref;
+ int r = rgw_get_rados_ref(dpp, cls->rados,
+ { cls->zone_svc->get_zone_params().otp_pool, oid },
+ &ref);
if (r < 0) {
- ldpp_dout(dpp, 4) << "failed to open rados context for " << o << dendl;
+ ldpp_dout(dpp, 4) << "failed to open rados context for " << oid << dendl;
return r;
}
- auto& ref = obj.get_ref();
librados::ObjectReadOperation op;
struct timespec mtime_ts;
if (pmtime) {
op.stat2(nullptr, &mtime_ts, nullptr);
}
objv_tracker->prepare_op_for_read(&op);
- r = rados::cls::otp::OTP::get_all(&op, ref.pool.ioctx(), ref.obj.oid, result);
+ r = rados::cls::otp::OTP::get_all(&op, ref.ioctx, ref.obj.oid, result);
if (r < 0) {
return r;
}
cls_log_add_prepare_entry(entry, utime_t(ut), section, key, bl);
}
-int RGWSI_Cls::TimeLog::init_obj(const DoutPrefixProvider *dpp, const string& oid, RGWSI_RADOS::Obj& obj)
+int RGWSI_Cls::TimeLog::init_obj(const DoutPrefixProvider *dpp, const string& oid, rgw_rados_ref& obj)
{
- rgw_raw_obj o(zone_svc->get_zone_params().log_pool, oid);
- obj = rados_svc->obj(o);
- return obj.open(dpp);
-
+ rgw_raw_obj o(cls->zone_svc->get_zone_params().log_pool, oid);
+ return rgw_get_rados_ref(dpp, cls->rados, o, &obj);
}
-int RGWSI_Cls::TimeLog::add(const DoutPrefixProvider *dpp,
+
+int RGWSI_Cls::TimeLog::add(const DoutPrefixProvider *dpp,
const string& oid,
const real_time& ut,
const string& section,
bufferlist& bl,
optional_yield y)
{
- RGWSI_RADOS::Obj obj;
-
+ rgw_rados_ref obj;
int r = init_obj(dpp, oid, obj);
if (r < 0) {
return r;
bool monotonic_inc,
optional_yield y)
{
- RGWSI_RADOS::Obj obj;
+ rgw_rados_ref obj;
int r = init_obj(dpp, oid, obj);
if (r < 0) {
bool *truncated,
optional_yield y)
{
- RGWSI_RADOS::Obj obj;
+ rgw_rados_ref obj;
int r = init_obj(dpp, oid, obj);
if (r < 0) {
cls_log_header *header,
optional_yield y)
{
- RGWSI_RADOS::Obj obj;
+ rgw_rados_ref obj;
int r = init_obj(dpp, oid, obj);
if (r < 0) {
}
int RGWSI_Cls::TimeLog::info_async(const DoutPrefixProvider *dpp,
- RGWSI_RADOS::Obj& obj,
+ rgw_rados_ref& obj,
const string& oid,
cls_log_header *header,
librados::AioCompletion *completion)
librados::AioCompletion *completion,
optional_yield y)
{
- RGWSI_RADOS::Obj obj;
+ rgw_rados_ref obj;
int r = init_obj(dpp, oid, obj);
if (r < 0) {
string& owner_id,
std::optional<string> lock_name)
{
- auto p = rados_svc->pool(pool);
- int r = p.open(dpp);
+
+ librados::IoCtx p;
+ int r = rgw_init_ioctx(dpp, cls->rados, pool, p, true, false);
if (r < 0) {
return r;
}
uint64_t msec = std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
utime_t ut(msec / 1000, msec % 1000);
-
+
rados::cls::lock::Lock l(lock_name.value_or(log_lock_name));
l.set_duration(ut);
l.set_cookie(owner_id);
l.set_tag(zone_id);
l.set_may_renew(true);
-
- return l.lock_exclusive(&p.ioctx(), oid);
+
+ return l.lock_exclusive(&p, oid);
}
int RGWSI_Cls::Lock::unlock(const DoutPrefixProvider *dpp,
string& owner_id,
std::optional<string> lock_name)
{
- auto p = rados_svc->pool(pool);
- int r = p.open(dpp);
+ librados::IoCtx p;
+ int r = rgw_init_ioctx(dpp, cls->rados, pool, p, true, false);
if (r < 0) {
return r;
}
-
+
rados::cls::lock::Lock l(lock_name.value_or(log_lock_name));
l.set_tag(zone_id);
l.set_cookie(owner_id);
-
- return l.unlock(&p.ioctx(), oid);
-}
+ return l.unlock(&p, oid);
+}
class RGWSI_Cls : public RGWServiceInstance
{
RGWSI_Zone *zone_svc{nullptr};
- RGWSI_RADOS *rados_svc{nullptr};
+ librados::Rados* rados{nullptr};
class ClsSubService : public RGWServiceInstance {
friend class RGWSI_Cls;
- RGWSI_Cls *cls_svc{nullptr};
- RGWSI_Zone *zone_svc{nullptr};
- RGWSI_RADOS *rados_svc{nullptr};
+ RGWSI_Cls *cls{nullptr};
- void init(RGWSI_Cls *_cls_svc, RGWSI_Zone *_zone_svc, RGWSI_RADOS *_rados_svc) {
- cls_svc = _cls_svc;
- zone_svc = _cls_svc->zone_svc;
- rados_svc = _cls_svc->rados_svc;
+ void init(RGWSI_Cls *cls_) {
+ cls = cls_;
}
public:
public:
class MFA : public ClsSubService {
- int get_mfa_obj(const DoutPrefixProvider *dpp, const rgw_user& user, std::optional<RGWSI_RADOS::Obj> *obj);
int get_mfa_ref(const DoutPrefixProvider *dpp, const rgw_user& user, rgw_rados_ref *ref);
void prepare_mfa_write(librados::ObjectWriteOperation *op,
} mfa;
class TimeLog : public ClsSubService {
- int init_obj(const DoutPrefixProvider *dpp, const std::string& oid, RGWSI_RADOS::Obj& obj);
+ int init_obj(const DoutPrefixProvider *dpp, const std::string& oid, rgw_rados_ref& obj);
public:
TimeLog(CephContext *cct): ClsSubService(cct) {}
cls_log_header *header,
optional_yield y);
int info_async(const DoutPrefixProvider *dpp,
- RGWSI_RADOS::Obj& obj,
+ rgw_rados_ref& obj,
const std::string& oid,
cls_log_header *header,
librados::AioCompletion *completion);
} timelog;
class Lock : public ClsSubService {
- int init_obj(const std::string& oid, RGWSI_RADOS::Obj& obj);
+ int init_obj(const std::string& oid, rgw_rados_ref& obj);
public:
Lock(CephContext *cct): ClsSubService(cct) {}
int lock_exclusive(const DoutPrefixProvider *dpp,
RGWSI_Cls(CephContext *cct): RGWServiceInstance(cct), mfa(cct), timelog(cct), lock(cct) {}
- void init(RGWSI_Zone *_zone_svc, RGWSI_RADOS *_rados_svc) {
- rados_svc = _rados_svc;
+ void init(RGWSI_Zone *_zone_svc, librados::Rados* rados_) {
+ rados = rados_;
zone_svc = _zone_svc;
- mfa.init(this, zone_svc, rados_svc);
- timelog.init(this, zone_svc, rados_svc);
- lock.init(this, zone_svc, rados_svc);
+ mfa.init(this);
+ timelog.init(this);
+ lock.init(this);
}
int do_start(optional_yield, const DoutPrefixProvider *dpp) override;
};
-