}
cn = stack->create_completion_notifier();
- return ref.pool.ioctx().aio_operate(ref.obj.oid, cn->completion(), &op,
+ return ref.ioctx.aio_operate(ref.obj.oid, cn->completion(), &op,
nullptr);
}
l.set_cookie(cookie);
l.set_may_renew(true);
- return l.lock_exclusive(&ref.pool.ioctx(), ref.obj.oid);
+ return l.lock_exclusive(&ref.ioctx, ref.obj.oid);
}
RGWAsyncLockSystemObj::RGWAsyncLockSystemObj(RGWCoroutine *caller, RGWAioCompletionNotifier *cn, rgw::sal::RadosStore* _store,
l.set_cookie(cookie);
- return l.unlock(&ref.pool.ioctx(), ref.obj.oid);
+ return l.unlock(&ref.ioctx, ref.obj.oid);
}
RGWAsyncUnlockSystemObj::RGWAsyncUnlockSystemObj(RGWCoroutine *caller, RGWAioCompletionNotifier *cn, rgw::sal::RadosStore* _store,
op.omap_set(entries);
cn = stack->create_completion_notifier();
- return ref.pool.ioctx().aio_operate(ref.obj.oid, cn->completion(), &op);
+ return ref.ioctx.aio_operate(ref.obj.oid, cn->completion(), &op);
}
int RGWRadosSetOmapKeysCR::request_complete()
op.omap_get_keys2(marker, max_entries, &result->entries, &result->more, nullptr);
cn = stack->create_completion_notifier(result);
- return result->ref.pool.ioctx().aio_operate(result->ref.obj.oid, cn->completion(), &op, NULL);
+ return result->ref.ioctx.aio_operate(result->ref.obj.oid, cn->completion(), &op, NULL);
}
int RGWRadosGetOmapKeysCR::request_complete()
op.omap_get_vals2(marker, max_entries, &result->entries, &result->more, nullptr);
cn = stack->create_completion_notifier(result);
- return result->ref.pool.ioctx().aio_operate(result->ref.obj.oid, cn->completion(), &op, NULL);
+ return result->ref.ioctx.aio_operate(result->ref.obj.oid, cn->completion(), &op, NULL);
}
int RGWRadosGetOmapValsCR::request_complete()
op.omap_rm_keys(keys);
cn = stack->create_completion_notifier();
- return ref.pool.ioctx().aio_operate(ref.obj.oid, cn->completion(), &op);
+ return ref.ioctx.aio_operate(ref.obj.oid, cn->completion(), &op);
}
int RGWRadosRemoveOmapKeysCR::request_complete()
set_status() << "sending request";
cn = stack->create_completion_notifier();
- return ref.pool.ioctx().aio_notify(ref.obj.oid, cn->completion(), request,
+ return ref.ioctx.aio_notify(ref.obj.oid, cn->completion(), request,
timeout_ms, response);
}
op.read(0, -1, &bl, nullptr);
cn = stack->create_completion_notifier();
- return ref.pool.ioctx().aio_operate(ref.obj.oid, cn->completion(), &op,
- nullptr);
+ return ref.ioctx.aio_operate(ref.obj.oid, cn->completion(), &op, nullptr);
}
int request_complete() {
op.write_full(bl);
cn = stack->create_completion_notifier();
- return ref.pool.ioctx().aio_operate(ref.obj.oid, cn->completion(), &op);
+ return ref.ioctx.aio_operate(ref.obj.oid, cn->completion(), &op);
}
int request_complete() override {
return 0;
}
- return ref.pool.ioctx().aio_operate(ref.obj.oid, cn->completion(), &op);
+ return ref.ioctx.aio_operate(ref.obj.oid, cn->completion(), &op);
}
int request_complete() override {
do {
librados::ObjectWriteOperation op;
cls_timeindex_trim(op, from_time, to_time, from_marker, to_marker);
- int r = rgw_rados_operate(dpp, ref.pool.ioctx(), oid, &op, null_yield);
+ int r = rgw_rados_operate(dpp, ref.ioctx, oid, &op, null_yield);
if (r == -ENODATA)
done = true;
else if (r < 0)
const string& from_marker,
const string& to_marker, optional_yield y)
{
- auto obj = rados_svc->obj(rgw_raw_obj(driver->svc()->zone->get_zone_params().log_pool, oid));
- int r = obj.open(dpp);
- if (r < 0) {
- ldpp_dout(dpp, 0) << "ERROR: " << __func__ << "(): failed to open obj=" << obj << " (r=" << r << ")" << dendl;
- return r;
+ rgw_rados_ref ref;
+ auto ret = rgw_get_rados_ref(dpp, driver->getRados()->get_rados_handle(),
+ {driver->svc()->zone->get_zone_params().log_pool, oid},
+ &ref);
+ if (ret < 0) {
+ ldpp_dout(dpp, 0) << "ERROR: " << __func__ << "(): failed to open oid="
+ << oid << " (r=" << ret << ")" << dendl;
+ return ret;
}
- auto& ref = obj.get_ref();
- int ret = cls_timeindex_trim_repeat(dpp, ref, oid, utime_t(start_time), utime_t(end_time),
- from_marker, to_marker, y);
+ ret = cls_timeindex_trim_repeat(dpp, ref, oid, utime_t(start_time), utime_t(end_time),
+ from_marker, to_marker, y);
if ((ret < 0 ) && (ret != -ENOENT)) {
return ret;
}
librados::ObjectWriteOperation op;
cls_rgw_mp_upload_part_info_update(op, p, info);
- r = rgw_rados_operate(rctx.dpp, meta_obj_ref.pool.ioctx(), meta_obj_ref.obj.oid, &op, rctx.y);
+ r = rgw_rados_operate(rctx.dpp, meta_obj_ref.ioctx, meta_obj_ref.obj.oid, &op, rctx.y);
ldpp_dout(rctx.dpp, 20) << "Update meta: " << meta_obj_ref.obj.oid << " part " << p << " prefix " << info.manifest.get_prefix() << " return " << r << dendl;
if (r == -EOPNOTSUPP) {
op = librados::ObjectWriteOperation{};
op.assert_exists(); // detect races with abort
op.omap_set(m);
- r = rgw_rados_operate(rctx.dpp, meta_obj_ref.pool.ioctx(), meta_obj_ref.obj.oid, &op, rctx.y);
+ r = rgw_rados_operate(rctx.dpp, meta_obj_ref.ioctx, meta_obj_ref.obj.oid, &op, rctx.y);
}
if (r < 0) {
return r == -ENOENT ? -ERR_NO_SUCH_UPLOAD : r;
const rgw_obj& obj,
rgw_rados_ref *ref)
{
- get_obj_bucket_and_oid_loc(obj, ref->obj.oid, ref->obj.loc);
-
- rgw_pool pool;
- if (!get_obj_data_pool(target_placement_rule, obj, &pool)) {
- ldpp_dout(dpp, 0) << "ERROR: cannot get data pool for obj=" << obj << ", probably misconfiguration" << dendl;
+ rgw_raw_obj raw;
+ get_obj_bucket_and_oid_loc(obj, raw.oid, raw.loc);
+ if (!get_obj_data_pool(target_placement_rule, obj, &raw.pool)) {
+ ldpp_dout(dpp, 0) << "ERROR: cannot get data pool for obj=" << obj
+ << ", probably misconfiguration" << dendl;
return -EIO;
}
-
- ref->pool = svc.rados->pool(pool);
-
- int r = ref->pool.open(dpp, RGWSI_RADOS::OpenParams()
- .set_mostly_omap(false));
+ auto r = rgw_get_rados_ref(dpp, get_rados_handle(), raw, ref);
if (r < 0) {
- ldpp_dout(dpp, 0) << "ERROR: failed opening data pool (pool=" << pool << "); r=" << r << dendl;
+ ldpp_dout(dpp, 0) << "ERROR: failed opening data pool (pool="
+ << raw.pool << "); r=" << r << dendl;
return r;
}
-
- ref->pool.ioctx().locator_set_key(ref->obj.loc);
-
return 0;
}
return get_obj_head_ref(dpp, bucket_info.placement_rule, obj, ref);
}
-int RGWRados::get_raw_obj_ref(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, rgw_rados_ref *ref)
+int RGWRados::get_raw_obj_ref(const DoutPrefixProvider *dpp, rgw_raw_obj obj, rgw_rados_ref* ref)
{
- ref->obj = obj;
-
- if (ref->obj.oid.empty()) {
- ref->obj.oid = obj.pool.to_str();
- ref->obj.pool = svc.zone->get_zone_params().domain_root;
+ if (obj.oid.empty()) {
+ obj.oid = obj.pool.to_str();
+ obj.pool = svc.zone->get_zone_params().domain_root;
}
- ref->pool = svc.rados->pool(obj.pool);
- int r = ref->pool.open(dpp, RGWSI_RADOS::OpenParams()
- .set_mostly_omap(false));
+ int r = rgw_get_rados_ref(dpp, get_rados_handle(), std::move(obj), ref);
if (r < 0) {
ldpp_dout(dpp, 0) << "ERROR: failed opening pool (pool=" << obj.pool << "); r=" << r << dendl;
return r;
}
- ref->pool.ioctx().locator_set_key(ref->obj.loc);
-
return 0;
}
continue;
}
- auto& ioctx = ref.pool.ioctx();
+ auto& ioctx = ref.ioctx;
get_obj_bucket_and_oid_loc(loc, oid, locator);
- ref.pool.ioctx().locator_set_key(locator);
+ ref.ioctx.locator_set_key(locator);
ldpp_dout(dpp, 20) << __func__ << ": key=" << key << " oid=" << oid << " locator=" << locator << dendl;
return r;
}
- auto& ioctx = ref.pool.ioctx();
+ auto& ioctx = ref.ioctx;
tracepoint(rgw_rados, operate_enter, req_id.c_str());
- r = rgw_rados_operate(rctx.dpp, ref.pool.ioctx(), ref.obj.oid, &op, rctx.y);
+ r = rgw_rados_operate(rctx.dpp, ref.ioctx, ref.obj.oid, &op, rctx.y);
tracepoint(rgw_rados, operate_exit, req_id.c_str());
if (r < 0) { /* we can expect to get -ECANCELED if object was replaced under,
or -ENOENT if was removed, or -EEXIST if it did not exist
store->remove_rgw_head_obj(op);
- auto& ioctx = ref.pool.ioctx();
+ auto& ioctx = ref.ioctx;
r = rgw_rados_operate(dpp, ioctx, ref.obj.oid, &op, y);
/* raced with another operation, object state is indeterminate */
ObjectWriteOperation op;
op.remove();
- r = rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, y);
+ r = rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, &op, y);
if (r < 0)
return r;
}
struct timespec mtime_ts = real_clock::to_timespec(mtime);
op.mtime2(&mtime_ts);
- auto& ioctx = ref.pool.ioctx();
+ auto& ioctx = ref.ioctx;
r = rgw_rados_operate(dpp, ioctx, ref.obj.oid, &op, y);
if (state) {
if (r >= 0) {
return r;
}
- return rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, op, y);
+ return rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, op, y);
}
int RGWRados::obj_operate(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, const rgw_obj& obj, ObjectReadOperation *op, optional_yield y)
bufferlist outbl;
- return rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, op, &outbl, y);
+ return rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, op, &outbl, y);
}
void RGWRados::olh_cancel_modification(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info,
ObjectWriteOperation op;
bucket_index_guard_olh_op(dpp, state, op);
op.rmxattr(attr_name.c_str());
- r = rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, y);
+ r = rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, &op, y);
if (r < 0) {
if (r != -ENOENT && r != -ECANCELED) {
ldpp_dout(dpp, 0) << __func__ << " target_obj=" << olh_obj << " rmxattr rgw_rados_operate() returned " << r << dendl;
rm_op.cmpxattr(RGW_ATTR_OLH_INFO, CEPH_OSD_CMPXATTR_OP_EQ, bufferlist());
cls_obj_check_prefix_exist(rm_op, RGW_ATTR_OLH_PENDING_PREFIX, true);
rm_op.remove();
- r = rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &rm_op, y);
+ r = rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, &rm_op, y);
}
if (r < 0 && (r != -ENOENT && r != -ECANCELED)) {
ldpp_dout(dpp, 0) << __func__ << " target_obj=" << olh_obj << " olh rm rgw_rados_operate() returned " << r << dendl;
if (r < 0) {
return r;
}
- r = rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, y);
+ r = rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, &op, y);
if (r < 0) {
ldpp_dout(dpp, 0) << "repair_olh failed to write olh attributes with "
<< cpp_strerror(r) << dendl;
}
/* update olh object */
- r = rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, y);
+ r = rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, &op, y);
if (r < 0) {
ldpp_dout(dpp, 0) << "ERROR: " << __func__ << ": could not apply olh update to oid \"" << ref.obj.oid << "\", r=" << r << dendl;
return r;
cls_obj_check_prefix_exist(rm_op, RGW_ATTR_OLH_PENDING_PREFIX, true); /* fail if found one of these, pending modification */
rm_op.remove();
- r = rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &rm_op, y);
+ r = rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, &rm_op, y);
if (r == -ECANCELED) {
return r; /* someone else made a modification in the meantime */
}
op.rmxattr(i->first.c_str());
}
- r = rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, y);
+ r = rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, &op, y);
if (r == -ENOENT || r == -ECANCELED) {
/* raced with some other change, shouldn't sweat about it */
return 0;
op.read(0, cct->_conf->rgw_max_chunk_size, first_chunk, NULL);
}
bufferlist outbl;
- r = rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, &outbl, y);
+ r = rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, &op, &outbl, y);
if (epoch) {
- *epoch = ref.pool.ioctx().get_last_version();
+ *epoch = ref.ioctx.get_last_version();
}
if (r < 0)
librados::Rados *rad = get_rados_handle();
librados::AioCompletion *completion = rad->aio_create_completion(nullptr, nullptr);
- r = ref.pool.ioctx().aio_append(ref.obj.oid, completion, bl, size);
+ r = ref.ioctx.aio_append(ref.obj.oid, completion, bl, size);
completion->release();
return r;
}
ObjectWriteOperation op;
cls_rgw_usage_log_add(op, info);
- r = rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, y);
+ r = rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, &op, y);
return r;
}
*is_truncated = false;
- r = cls_rgw_usage_log_read(ref.pool.ioctx(), ref.obj.oid, user, bucket, start_epoch, end_epoch,
+ r = cls_rgw_usage_log_read(ref.ioctx, ref.obj.oid, user, bucket, start_epoch, end_epoch,
max_entries, read_iter, usage, is_truncated);
return r;
do {
librados::ObjectWriteOperation op;
cls_rgw_usage_log_trim(op, user, bucket, start_epoch, end_epoch);
- int r = rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, y);
+ int r = rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, &op, y);
if (r == -ENODATA)
done = true;
else if (r < 0)
}
librados::ObjectWriteOperation op;
cls_rgw_usage_log_clear(op);
- r = rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, y);
+ r = rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, &op, y);
return r;
}
cls_rgw_remove_obj(op, prefixes);
AioCompletion *c = librados::Rados::aio_create_completion(nullptr, nullptr);
- ret = ref.pool.ioctx().aio_operate(ref.obj.oid, c, &op);
+ ret = ref.ioctx.aio_operate(ref.obj.oid, c, &op);
if (ret < 0) {
ldpp_dout(dpp, -1) << "ERROR: AioOperate failed with ret=" << ret << dendl;
c->release();
cls_rgw_remove_obj(op, prefixes);
AioCompletion *c = librados::Rados::aio_create_completion(nullptr, nullptr);
- ret = ref.pool.ioctx().aio_operate(ref.obj.oid, c, &op);
+ ret = ref.ioctx.aio_operate(ref.obj.oid, c, &op);
if (ret < 0) {
ldpp_dout(dpp, -1) << "ERROR: AioOperate failed with ret=" << ret << dendl;
c->release();
}
- int get_raw_obj_ref(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, rgw_rados_ref *ref);
+ int get_raw_obj_ref(const DoutPrefixProvider *dpp, rgw_raw_obj obj, rgw_rados_ref *ref);
int list_raw_objects_init(const DoutPrefixProvider *dpp, const rgw_pool& pool, const std::string& marker, RGWListRawObjsCtx *ctx);
int list_raw_objects_next(const DoutPrefixProvider *dpp, const std::string& prefix_filter, int max,
librados::ObjectReadOperation op;
op.omap_get_vals_by_keys(keys, &result, nullptr);
- ret = rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, nullptr, y);
+ ret = rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, &op, nullptr, y);
if (ret < 0) {
return ret;
}
return 0;
}
+int rgw_get_rados_ref(const DoutPrefixProvider* dpp, librados::Rados* rados,
+ rgw_raw_obj obj, rgw_rados_ref* ref)
+{
+ ref->obj = std::move(obj);
+
+ int r = rgw_init_ioctx(dpp, rados, ref->obj.pool,
+ ref->ioctx, true, false);
+ if (r < 0) {
+ ldpp_dout(dpp, 0) << "ERROR: creating ioctx (pool=" << ref->obj.pool
+ << "); r=" << r << dendl;
+ return r;
+ }
+
+ ref->ioctx.locator_set_key(ref->obj.loc);
+ return 0;
+}
+
+
map<string, bufferlist>* no_change_attrs() {
static map<string, bufferlist> no_change;
return &no_change;
struct obj_version;
+struct rgw_rados_ref {
+ librados::IoCtx ioctx;
+ rgw_raw_obj obj;
+};
+int rgw_get_rados_ref(const DoutPrefixProvider* dpp, librados::Rados* rados,
+ rgw_raw_obj obj, rgw_rados_ref* ref);
int rgw_init_ioctx(const DoutPrefixProvider *dpp,
librados::Rados *rados, const rgw_pool& pool,
int rgw_rados_operate(const DoutPrefixProvider *dpp, librados::IoCtx& ioctx, const std::string& oid,
librados::ObjectWriteOperation *op, optional_yield y,
int flags = 0);
+inline int rgw_rados_operate(const DoutPrefixProvider *dpp,
+ rgw_rados_ref& ref,
+ librados::ObjectReadOperation *op, bufferlist *pbl,
+ optional_yield y, int flags = 0)
+{
+ return rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, op, pbl, y, flags);
+}
+
+inline int rgw_rados_operate(const DoutPrefixProvider *dpp,
+ rgw_rados_ref& ref,
+ librados::ObjectWriteOperation *op,
+ optional_yield y, int flags = 0)
+{
+ return rgw_rados_operate(dpp, ref.ioctx, ref.obj.oid, op, y, flags);
+}
+
int rgw_rados_notify(const DoutPrefixProvider *dpp, librados::IoCtx& ioctx, const std::string& oid,
bufferlist& bl, uint64_t timeout_ms, bufferlist* pbl,
optional_yield y);
+inline int rgw_rados_notify(const DoutPrefixProvider *dpp, rgw_rados_ref& ref,
+ bufferlist& bl, uint64_t timeout_ms,
+ bufferlist* pbl, optional_yield y)
+{
+ return rgw_rados_notify(dpp, ref.ioctx, ref.obj.oid, bl, timeout_ms, pbl, y);
+}
int rgw_tools_init(const DoutPrefixProvider *dpp, CephContext *cct);
void rgw_tools_cleanup();
}
// register a watch on the realm's control object
- r = ref.pool.ioctx().watch2(ref.obj.oid, &handle, this);
+ r = ref.ioctx.watch2(ref.obj.oid, &handle, this);
if (r == -ENOENT) {
constexpr bool exclusive = true;
- r = ref.pool.ioctx().create(ref.obj.oid, exclusive);
+ r = ref.ioctx.create(ref.obj.oid, exclusive);
if (r == -EEXIST || r == 0) {
- r = ref.pool.ioctx().watch2(ref.obj.oid, &handle, this);
+ r = ref.ioctx.watch2(ref.obj.oid, &handle, this);
}
}
if (r < 0) {
ldpp_dout(dpp, -1) << "Failed to watch " << ref.obj
<< " with " << cpp_strerror(-r) << dendl;
- ref.pool.ioctx().close();
+ ref.ioctx.close();
return r;
}
}
int restart() {
- int r = ref.pool.ioctx().unwatch2(handle);
+ int r = ref.ioctx.unwatch2(handle);
if (r < 0) {
lderr(store->ctx()) << "Failed to unwatch on " << ref.obj
<< " with " << cpp_strerror(-r) << dendl;
}
- r = ref.pool.ioctx().watch2(ref.obj.oid, &handle, this);
+ r = ref.ioctx.watch2(ref.obj.oid, &handle, this);
if (r < 0) {
lderr(store->ctx()) << "Failed to restart watch on " << ref.obj
<< " with " << cpp_strerror(-r) << dendl;
- ref.pool.ioctx().close();
+ ref.ioctx.close();
}
return r;
}
void stop() {
if (handle) {
- ref.pool.ioctx().unwatch2(handle);
- ref.pool.ioctx().close();
+ ref.ioctx.unwatch2(handle);
+ ref.ioctx.close();
}
}
} catch (const buffer::error& e) {
lderr(store->ctx()) << "Failed to decode notification: " << e.what() << dendl;
}
- ref.pool.ioctx().notify_ack(ref.obj.oid, notify_id, cookie, reply);
+ ref.ioctx.notify_ack(ref.obj.oid, notify_id, cookie, reply);
}
/// reestablish the watch if it gets disconnected
}
// register a watch on the control object
- r = ref.pool.ioctx().watch2(ref.obj.oid, &handle, this);
+ r = ref.ioctx.watch2(ref.obj.oid, &handle, this);
if (r == -ENOENT) {
constexpr bool exclusive = true;
- r = ref.pool.ioctx().create(ref.obj.oid, exclusive);
+ r = ref.ioctx.create(ref.obj.oid, exclusive);
if (r == -EEXIST || r == 0) {
- r = ref.pool.ioctx().watch2(ref.obj.oid, &handle, this);
+ r = ref.ioctx.watch2(ref.obj.oid, &handle, this);
}
}
if (r < 0) {
ldpp_dout(dpp, -1) << "Failed to watch " << ref.obj
<< " with " << cpp_strerror(-r) << dendl;
- ref.pool.ioctx().close();
+ ref.ioctx.close();
return r;
}
int restart()
{
- int r = ref.pool.ioctx().unwatch2(handle);
+ int r = ref.ioctx.unwatch2(handle);
if (r < 0) {
ldpp_dout(dpp, -1) << "Failed to unwatch on " << ref.obj
<< " with " << cpp_strerror(-r) << dendl;
}
- r = ref.pool.ioctx().watch2(ref.obj.oid, &handle, this);
+ r = ref.ioctx.watch2(ref.obj.oid, &handle, this);
if (r < 0) {
ldpp_dout(dpp, -1) << "Failed to restart watch on " << ref.obj
<< " with " << cpp_strerror(-r) << dendl;
- ref.pool.ioctx().close();
+ ref.ioctx.close();
}
return r;
}
void stop()
{
if (handle) {
- ref.pool.ioctx().unwatch2(handle);
- ref.pool.ioctx().close();
+ ref.ioctx.unwatch2(handle);
+ ref.ioctx.close();
}
}
bufferlist reply;
encode(response, reply);
- ref.pool.ioctx().notify_ack(ref.obj.oid, notify_id, cookie, reply);
+ ref.ioctx.notify_ack(ref.obj.oid, notify_id, cookie, reply);
}
// reestablish the watch if it gets disconnected
my_bids = this->my_bids;
}
- bool is_highest_bidder(std::size_t index)
+ bool is_highest_bidder(std::size_t index) override
{
auto lock = std::scoped_lock{mutex};
const bid_value my_bid = my_bids.at(index); // may throw
return true;
}
- RGWCoroutine* notify_cr()
+ RGWCoroutine* notify_cr() override
{
auto lock = std::scoped_lock{mutex};
return new NotifyCR(store, this, obj, my_bids);
int RGWSI_Cls::MFA::get_mfa_ref(const DoutPrefixProvider *dpp, const rgw_user& user, rgw_rados_ref *ref)
{
- std::optional<RGWSI_RADOS::Obj> obj;
- int r = get_mfa_obj(dpp, user, &obj);
+ string oid = get_mfa_oid(user);
+ rgw_raw_obj o(zone_svc->get_zone_params().otp_pool, oid);
+
+ auto r = rgw_get_rados_ref(dpp, rados_svc->get_rados_handle(), o, ref);
if (r < 0) {
+ ldpp_dout(dpp, 4) << "failed to open rados context for " << o << dendl;
return r;
}
- *ref = obj->get_ref();
+
return 0;
}
rados::cls::otp::otp_check_t result;
- r = rados::cls::otp::OTP::check(cct, ref.pool.ioctx(), ref.obj.oid, otp_id, pin, &result);
+ r = rados::cls::otp::OTP::check(cct, ref.ioctx, ref.obj.oid, otp_id, pin, &result);
if (r < 0)
return r;
return r;
}
- r = rados::cls::otp::OTP::get(nullptr, ref.pool.ioctx(), ref.obj.oid, id, result);
+ r = rados::cls::otp::OTP::get(nullptr, ref.ioctx, ref.obj.oid, id, result);
if (r < 0) {
return r;
}
return r;
}
- r = rados::cls::otp::OTP::get_all(nullptr, ref.pool.ioctx(), ref.obj.oid, result);
+ r = rados::cls::otp::OTP::get_all(nullptr, ref.ioctx, ref.obj.oid, result);
if (r < 0) {
return r;
}
return r;
}
- r = rados::cls::otp::OTP::get_current_time(ref.pool.ioctx(), ref.obj.oid, result);
+ r = rados::cls::otp::OTP::get_current_time(ref.ioctx, ref.obj.oid, result);
if (r < 0) {
return r;
}
#include "svc_rados.h"
+#include "driver/rados/rgw_tools.h"
+
class RGWSI_Cls : public RGWServiceInstance
{
friend Pool::List;
};
-using rgw_rados_ref = RGWSI_RADOS::rados_ref;
-
inline std::ostream& operator<<(std::ostream& out, const RGWSI_RADOS::Obj& obj) {
return out << obj.get_raw_obj();
}