int RGWRados::get_obj_head_ref(const RGWBucketInfo& bucket_info, const rgw_obj& obj, rgw_rados_ref *ref)
{
- get_obj_bucket_and_oid_loc(obj, ref->oid, ref->key);
+ get_obj_bucket_and_oid_loc(obj, ref->obj.oid, ref->obj.loc);
rgw_pool pool;
if (!get_obj_data_pool(bucket_info.placement_rule, obj, &pool)) {
return r;
}
- ref->ioctx.locator_set_key(ref->key);
+ ref->ioctx.locator_set_key(ref->obj.loc);
return 0;
}
int RGWRados::get_raw_obj_ref(const rgw_raw_obj& obj, rgw_rados_ref *ref)
{
- ref->oid = obj.oid;
- ref->key = obj.loc;
+ ref->obj = obj;
int r;
- if (ref->oid.empty()) {
- ref->oid = obj.pool.to_str();
- ref->pool = svc.zone->get_zone_params().domain_root;
- } else {
- ref->pool = obj.pool;
+ if (ref->obj.oid.empty()) {
+ ref->obj.oid = obj.pool.to_str();
+ ref->obj.pool = svc.zone->get_zone_params().domain_root;
}
- r = open_pool_ctx(ref->pool, ref->ioctx);
+ r = open_pool_ctx(ref->obj.pool, ref->ioctx);
if (r < 0)
return r;
- ref->ioctx.locator_set_key(ref->key);
+ ref->ioctx.locator_set_key(ref->obj.loc);
return 0;
}
}
tracepoint(rgw_rados, operate_enter, req_id.c_str());
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
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
return r;
store->remove_rgw_head_obj(op);
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
/* raced with another operation, object state is indeterminate */
const bool need_invalidate = (r == -ECANCELED);
ObjectWriteOperation op;
op.remove();
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
if (r < 0)
return r;
real_time mtime = real_clock::now();
struct timespec mtime_ts = real_clock::to_timespec(mtime);
op.mtime2(&mtime_ts);
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
if (state) {
if (r >= 0) {
bufferlist acl_bl = attrs[RGW_ATTR_ACL];
return r;
}
- return ref.ioctx.operate(ref.oid, op);
+ return ref.ioctx.operate(ref.obj.oid, op);
}
int RGWRados::obj_operate(const RGWBucketInfo& bucket_info, const rgw_obj& obj, ObjectReadOperation *op)
bufferlist outbl;
- return ref.ioctx.operate(ref.oid, op, &outbl);
+ return ref.ioctx.operate(ref.obj.oid, op, &outbl);
}
int RGWRados::olh_init_modification_impl(const RGWBucketInfo& bucket_info, RGWObjState& state, const rgw_obj& olh_obj, string *op_tag)
}
/* update olh object */
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
if (r == -ECANCELED) {
r = 0;
}
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 = ref.ioctx.operate(ref.oid, &rm_op);
+ r = ref.ioctx.operate(ref.obj.oid, &rm_op);
if (r == -ECANCELED) {
return 0; /* someone else won this race */
} else {
}
/* update olh object */
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
if (r == -ENOENT || r == -ECANCELED) {
/* raced with some other change, shouldn't sweat about it */
r = 0;
op.read(0, cct->_conf->rgw_max_chunk_size, first_chunk, NULL);
}
bufferlist outbl;
- r = ref.ioctx.operate(ref.oid, &op, &outbl);
+ r = ref.ioctx.operate(ref.obj.oid, &op, &outbl);
if (epoch) {
*epoch = ref.ioctx.get_last_version();
librados::Rados *rad = get_rados_handle();
librados::AioCompletion *completion = rad->aio_create_completion(NULL, NULL, NULL);
- r = ref.ioctx.aio_append(ref.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 = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
return r;
}
*is_truncated = false;
- r = cls_rgw_usage_log_read(ref.ioctx, ref.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;
return r;
}
- r = cls_rgw_usage_log_trim(ref.ioctx, ref.oid, user, bucket, start_epoch, end_epoch);
+ r = cls_rgw_usage_log_trim(ref.ioctx, ref.obj.oid, user, bucket, start_epoch, end_epoch);
return r;
}
}
librados::ObjectWriteOperation op;
cls_rgw_usage_log_clear(op);
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
return r;
}
int rc;
::cls_user_get_header(op, header, &rc);
bufferlist ibl;
- r = ref.ioctx.operate(ref.oid, &op, &ibl);
+ r = ref.ioctx.operate(ref.obj.oid, &op, &ibl);
if (r < 0)
return r;
if (rc < 0)
librados::ObjectWriteOperation op;
::cls_user_reset_stats(op);
- return ref.ioctx.operate(ref.oid, &op);
+ return ref.ioctx.operate(ref.obj.oid, &op);
}
int RGWRados::cls_user_get_header_async(const string& user_id, RGWGetUserHeader_CB *ctx)
return r;
}
- r = ::cls_user_get_header_async(ref.ioctx, ref.oid, ctx);
+ r = ::cls_user_get_header_async(ref.ioctx, ref.obj.oid, ctx);
if (r < 0)
return r;
cls_user_bucket_list(op, in_marker, end_marker, max_entries, entries, out_marker, truncated, &rc);
bufferlist ibl;
- r = ref.ioctx.operate(ref.oid, &op, &ibl);
+ r = ref.ioctx.operate(ref.obj.oid, &op, &ibl);
if (r < 0)
return r;
if (rc < 0)
librados::ObjectWriteOperation op;
cls_user_set_buckets(op, entries, add);
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
if (r < 0)
return r;
librados::ObjectWriteOperation op;
::cls_user_complete_stats_sync(op);
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
if (r < 0)
return r;
librados::ObjectWriteOperation op;
::cls_user_remove_bucket(op, bucket);
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
if (r < 0)
return r;
cls_rgw_remove_obj(op, prefixes);
AioCompletion *c = librados::Rados::aio_create_completion(NULL, NULL, NULL);
- ret = ref.ioctx.aio_operate(ref.oid, c, &op);
+ ret = ref.ioctx.aio_operate(ref.obj.oid, c, &op);
if (ret < 0) {
lderr(cct) << "ERROR: AioOperate failed with ret=" << ret << dendl;
c->release();
cls_rgw_remove_obj(op, prefixes);
AioCompletion *c = librados::Rados::aio_create_completion(NULL, NULL, NULL);
- ret = ref.ioctx.aio_operate(ref.oid, c, &op);
+ ret = ref.ioctx.aio_operate(ref.obj.oid, c, &op);
if (ret < 0) {
lderr(cct) << "ERROR: AioOperate failed with ret=" << ret << dendl;
c->release();
rados::cls::otp::otp_check_t result;
- r = rados::cls::otp::OTP::check(cct, ref.ioctx, ref.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;
librados::ObjectWriteOperation op;
prepare_mfa_write(&op, objv_tracker, mtime);
rados::cls::otp::OTP::create(&op, config);
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
if (r < 0) {
ldout(cct, 20) << "OTP create, otp_id=" << config.id << " result=" << (int)r << dendl;
return r;
librados::ObjectWriteOperation op;
prepare_mfa_write(&op, objv_tracker, mtime);
rados::cls::otp::OTP::remove(&op, id);
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
if (r < 0) {
ldout(cct, 20) << "OTP remove, otp_id=" << id << " result=" << (int)r << dendl;
return r;
return r;
}
- r = rados::cls::otp::OTP::get(nullptr, ref.ioctx, ref.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.ioctx, ref.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.ioctx, ref.oid, result);
+ r = rados::cls::otp::OTP::get_current_time(ref.ioctx, ref.obj.oid, result);
if (r < 0) {
return r;
}
}
prepare_mfa_write(&op, objv_tracker, mtime);
rados::cls::otp::OTP::set(&op, entries);
- r = ref.ioctx.operate(ref.oid, &op);
+ r = ref.ioctx.operate(ref.obj.oid, &op);
if (r < 0) {
ldout(cct, 20) << "OTP set entries.size()=" << entries.size() << " result=" << (int)r << dendl;
return r;
op.stat2(nullptr, &mtime_ts, nullptr);
}
objv_tracker->prepare_op_for_read(&op);
- r = rados::cls::otp::OTP::get_all(&op, ref.ioctx, ref.oid, result);
+ r = rados::cls::otp::OTP::get_all(&op, ref.ioctx, ref.obj.oid, result);
if (r < 0) {
return r;
}
return objs.size();
}
+
void RGWSI_RADOS::Obj::init(const rgw_raw_obj& obj)
{
- ref.oid = obj.oid;
- ref.key = obj.loc;
- ref.pool = obj.pool;
+ ref.obj = obj;
}
int RGWSI_RADOS::Obj::open()
{
- int r = rados_svc->open_pool_ctx(ref.pool, ref.ioctx, rados_handle);
+ int r = rados_svc->open_pool_ctx(ref.obj.pool, ref.ioctx, rados_handle);
if (r < 0) {
return r;
}
- ref.ioctx.locator_set_key(ref.key);
+ ref.ioctx.locator_set_key(ref.obj.loc);
return 0;
}
int RGWSI_RADOS::Obj::operate(librados::ObjectWriteOperation *op,
optional_yield y)
{
- return rgw_rados_operate(ref.ioctx, ref.oid, op, y);
+ return rgw_rados_operate(ref.ioctx, ref.obj.oid, op, y);
}
int RGWSI_RADOS::Obj::operate(librados::ObjectReadOperation *op, bufferlist *pbl,
optional_yield y)
{
- return rgw_rados_operate(ref.ioctx, ref.oid, op, pbl, y);
+ return rgw_rados_operate(ref.ioctx, ref.obj.oid, op, pbl, y);
}
int RGWSI_RADOS::Obj::aio_operate(librados::AioCompletion *c, librados::ObjectWriteOperation *op)
{
- return ref.ioctx.aio_operate(ref.oid, c, op);
+ return ref.ioctx.aio_operate(ref.obj.oid, c, op);
}
int RGWSI_RADOS::Obj::aio_operate(librados::AioCompletion *c, librados::ObjectReadOperation *op,
bufferlist *pbl)
{
- return ref.ioctx.aio_operate(ref.oid, c, op, pbl);
+ return ref.ioctx.aio_operate(ref.obj.oid, c, op, pbl);
}
int RGWSI_RADOS::Obj::watch(uint64_t *handle, librados::WatchCtx2 *ctx)
{
- return ref.ioctx.watch2(ref.oid, handle, ctx);
+ return ref.ioctx.watch2(ref.obj.oid, handle, ctx);
}
int RGWSI_RADOS::Obj::aio_watch(librados::AioCompletion *c, uint64_t *handle, librados::WatchCtx2 *ctx)
{
- return ref.ioctx.aio_watch(ref.oid, c, handle, ctx);
+ return ref.ioctx.aio_watch(ref.obj.oid, c, handle, ctx);
}
int RGWSI_RADOS::Obj::unwatch(uint64_t handle)
uint64_t timeout_ms,
bufferlist *pbl)
{
- return ref.ioctx.notify2(ref.oid, bl, timeout_ms, pbl);
+ return ref.ioctx.notify2(ref.obj.oid, bl, timeout_ms, pbl);
}
void RGWSI_RADOS::Obj::notify_ack(uint64_t notify_id,
uint64_t cookie,
bufferlist& bl)
{
- ref.ioctx.notify_ack(ref.oid, notify_id, cookie, bl);
+ ref.ioctx.notify_ack(ref.obj.oid, notify_id, cookie, bl);
}
uint64_t RGWSI_RADOS::Obj::get_last_version()