}
map<string, bufferlist> attrs;
- ret = obj->put(bl, attrs, dpp());
+ ret = obj->put(bl, attrs, dpp(), null_yield);
if (ret < 0) {
cerr << "ERROR: put object returned error: " << cpp_strerror(-ret) << std::endl;
}
}
}
if (need_rewrite) {
- ret = store->rewrite_obj(bucket_info, obj, dpp());
+ ret = store->rewrite_obj(bucket_info, obj, dpp(), null_yield);
if (ret < 0) {
cerr << "ERROR: object rewrite returned: " << cpp_strerror(-ret) << std::endl;
return -ret;
if (!need_rewrite) {
formatter->dump_string("status", "Skipped");
} else {
- r = store->rewrite_obj(bucket_info, obj, dpp());
+ r = store->rewrite_obj(bucket_info, obj, dpp(), null_yield);
if (r == 0) {
formatter->dump_string("status", "Success");
} else {
}
} // for all shadow objs
- ret = store->delete_obj_aio(head_obj, info, astate, handles, keep_index_consistent);
+ ret = store->delete_obj_aio(head_obj, info, astate, handles, keep_index_consistent, null_yield);
if (ret < 0) {
lderr(store->ctx()) << "ERROR: delete obj aio failed with " << ret << dendl;
return ret;
del_op.params.high_precision_time = true;
del_op.params.zones_trace = &zones_trace;
- ret = del_op.delete_obj();
+ ret = del_op.delete_obj(null_yield);
if (ret < 0) {
ldout(store->ctx(), 20) << __func__ << "(): delete_obj() obj=" << obj << " returned ret=" << ret << dendl;
}
obj->set_user_data(*params.user_data);
}
- ret = obj->put(params.data, params.attrs, dpp);
+ ret = obj->put(params.data, params.attrs, dpp, null_yield);
if (ret < 0) {
lderr(cct) << "ERROR: put object returned error: " << cpp_strerror(-ret) << dendl;
}
op_ret = processor->complete(s->obj_size, etag, &mtime, real_time(), attrs,
(delete_at ? *delete_at : real_time()),
- if_match, if_nomatch, nullptr, nullptr, nullptr);
+ if_match, if_nomatch, nullptr, nullptr, nullptr,
+ s->yield);
if (op_ret != 0) {
/* revert attr updates */
rgw_fh->set_mtime(omtime);
del_op.params.obj_owner = obj_owner;
del_op.params.unmod_since = meta.mtime;
- return del_op.delete_obj();
+ return del_op.delete_obj(null_yield);
}
class LCOpAction {
}
int r = oc.store->transition_obj(oc.rctx, oc.bucket_info, oc.obj,
- target_placement, o.meta.mtime, o.versioned_epoch, oc.dpp);
+ target_placement, o.meta.mtime, o.versioned_epoch, oc.dpp, null_yield);
if (r < 0) {
ldpp_dout(oc.dpp, 0) << "ERROR: failed to transition obj (r=" << r << ")" << dendl;
return r;
}
// and also remove the metadata obj
- ret = del_op.delete_obj();
+ ret = del_op.delete_obj(null_yield);
if (ret < 0) {
ldout(cct, 20) << __func__ << ": del_op.delete_obj returned " <<
ret << dendl;
}
store->set_atomic(s->obj_ctx, read_op.state.obj);
attrs[attr_name] = attr_val;
- return store->set_attrs(s->obj_ctx, s->bucket_info, read_op.state.obj, attrs, NULL);
+ return store->set_attrs(s->obj_ctx, s->bucket_info, read_op.state.obj, attrs, NULL, s->yield);
}
static int read_bucket_policy(RGWRados *store,
map <string, bufferlist> rmattr;
bufferlist bl;
rmattr[RGW_ATTR_TAGS] = bl;
- op_ret = store->set_attrs(s->obj_ctx, s->bucket_info, obj, attrs, &rmattr);
+ op_ret = store->set_attrs(s->obj_ctx, s->bucket_info, obj, attrs, &rmattr, s->yield);
}
int RGWGetBucketTags::verify_permission()
tracepoint(rgw_op, processor_complete_enter, s->req_id.c_str());
op_ret = processor->complete(s->obj_size, etag, &mtime, real_time(), attrs,
(delete_at ? *delete_at : real_time()), if_match, if_nomatch,
- (user_data.empty() ? nullptr : &user_data), nullptr, nullptr);
+ (user_data.empty() ? nullptr : &user_data), nullptr, nullptr,
+ s->yield);
tracepoint(rgw_op, processor_complete_exit, s->req_id.c_str());
/* produce torrent */
op_ret = processor.complete(s->obj_size, etag, nullptr, real_time(), attrs,
(delete_at ? *delete_at : real_time()),
- nullptr, nullptr, nullptr, nullptr, nullptr);
+ nullptr, nullptr, nullptr, nullptr, nullptr,
+ s->yield);
if (op_ret < 0) {
return;
}
}
}
- op_ret = store->set_attrs(s->obj_ctx, s->bucket_info, obj, attrs, &rmattrs);
+ op_ret = store->set_attrs(s->obj_ctx, s->bucket_info, obj, attrs, &rmattrs, s->yield);
}
int RGWDeleteObj::handle_slo_manifest(bufferlist& bl)
del_op.params.unmod_since = unmod_since;
del_op.params.high_precision_time = s->system_request; /* system request uses high precision time */
- op_ret = del_op.delete_obj();
+ op_ret = del_op.delete_obj(s->yield);
if (op_ret >= 0) {
delete_marker = del_op.result.delete_marker;
version_id = del_op.result.version_id;
&s->req_id, /* use req_id as tag */
&etag,
copy_obj_progress_cb, (void *)this,
- this);
+ this,
+ s->yield);
}
int RGWGetACLs::verify_permission()
encode(upload_info, bl);
obj_op.meta.data = &bl;
- op_ret = obj_op.write_meta(bl.length(), 0, attrs);
+ op_ret = obj_op.write_meta(bl.length(), 0, attrs, s->yield);
} while (op_ret == -EEXIST);
}
obj_op.meta.modify_tail = true;
obj_op.meta.completeMultipart = true;
obj_op.meta.olh_epoch = olh_epoch;
- op_ret = obj_op.write_meta(ofs, accounted_size, attrs);
+ op_ret = obj_op.write_meta(ofs, accounted_size, attrs, s->yield);
if (op_ret < 0)
return;
del_op.params.versioning_status = s->bucket_info.versioning_status();
del_op.params.obj_owner = s->owner;
- op_ret = del_op.delete_obj();
+ op_ret = del_op.delete_obj(s->yield);
if (op_ret == -ENOENT) {
op_ret = 0;
}
del_op.params.versioning_status = binfo.versioning_status();
del_op.params.obj_owner = bowner;
- ret = del_op.delete_obj();
+ ret = del_op.delete_obj(s->yield);
if (ret < 0) {
goto delop_fail;
}
/* Complete the transaction. */
op_ret = processor.complete(size, etag, nullptr, ceph::real_time(),
attrs, ceph::real_time() /* delete_at */,
- nullptr, nullptr, nullptr, nullptr, nullptr);
+ nullptr, nullptr, nullptr, nullptr, nullptr,
+ s->yield);
if (op_ret < 0) {
ldpp_dout(this, 20) << "processor::complete returned op_ret=" << op_ret << dendl;
}
if (!s->object.empty()) {
store->set_atomic(s->obj_ctx, obj);
- op_ret = store->set_attrs(s->obj_ctx, s->bucket_info, obj, attrs, nullptr);
+ op_ret = store->set_attrs(s->obj_ctx, s->bucket_info, obj, attrs, nullptr, s->yield);
} else {
for (auto& iter : attrs) {
s->bucket_attrs[iter.first] = std::move(iter.second);
del_op.params.bucket_owner = bucket_info.owner;
del_op.params.versioning_status = bucket_info.versioning_status();
- ret = del_op.delete_obj();
+ ret = del_op.delete_obj(null_yield);
if (ret < 0) {
ldout(store->ctx(), 1) << "ERROR: failed to remove event (obj=" << obj << "): ret=" << ret << dendl;
}
const char *if_nomatch,
const std::string *user_data,
rgw_zone_set *zones_trace,
- bool *pcanceled)
+ bool *pcanceled, optional_yield y)
{
int r = writer.drain();
if (r < 0) {
obj_op.meta.zones_trace = zones_trace;
obj_op.meta.modify_tail = true;
- r = obj_op.write_meta(actual_size, accounted_size, attrs);
+ r = obj_op.write_meta(actual_size, accounted_size, attrs, y);
if (r < 0) {
return r;
}
const char *if_nomatch,
const std::string *user_data,
rgw_zone_set *zones_trace,
- bool *pcanceled)
+ bool *pcanceled, optional_yield y)
{
int r = writer.drain();
if (r < 0) {
obj_op.meta.zones_trace = zones_trace;
obj_op.meta.modify_tail = true;
- r = obj_op.write_meta(actual_size, accounted_size, attrs);
+ r = obj_op.write_meta(actual_size, accounted_size, attrs, y);
if (r < 0)
return r;
int AppendObjectProcessor::complete(size_t accounted_size, const string &etag, ceph::real_time *mtime,
ceph::real_time set_mtime, map <string, bufferlist> &attrs,
ceph::real_time delete_at, const char *if_match, const char *if_nomatch,
- const string *user_data, rgw_zone_set *zones_trace, bool *pcanceled)
+ const string *user_data, rgw_zone_set *zones_trace, bool *pcanceled,
+ optional_yield y)
{
int r = writer.drain();
if (r < 0)
etag_bl.append(final_etag_str, strlen(final_etag_str) + 1);
attrs[RGW_ATTR_ETAG] = etag_bl;
}
- r = obj_op.write_meta(actual_size + cur_size, accounted_size + *cur_accounted_size, attrs);
+ r = obj_op.write_meta(actual_size + cur_size, accounted_size + *cur_accounted_size, attrs, y);
if (r < 0) {
return r;
}
ceph::real_time delete_at,
const char *if_match, const char *if_nomatch,
const std::string *user_data,
- rgw_zone_set *zones_trace, bool *canceled) = 0;
+ rgw_zone_set *zones_trace, bool *canceled,
+ optional_yield y) = 0;
};
// an object processor with special handling for the first chunk of the head.
ceph::real_time delete_at,
const char *if_match, const char *if_nomatch,
const std::string *user_data,
- rgw_zone_set *zones_trace, bool *canceled) override;
+ rgw_zone_set *zones_trace, bool *canceled,
+ optional_yield y) override;
};
ceph::real_time delete_at,
const char *if_match, const char *if_nomatch,
const std::string *user_data,
- rgw_zone_set *zones_trace, bool *canceled) override;
+ rgw_zone_set *zones_trace, bool *canceled,
+ optional_yield y) override;
};
ceph::real_time *mtime, ceph::real_time set_mtime,
map<string, bufferlist>& attrs, ceph::real_time delete_at,
const char *if_match, const char *if_nomatch, const string *user_data,
- rgw_zone_set *zones_trace, bool *canceled) override;
+ rgw_zone_set *zones_trace, bool *canceled,
+ optional_yield y) override;
};
} // namespace putobj
NULL, /* string *petag */
NULL, /* void (*progress_cb)(off_t, void *) */
NULL, /* void *progress_data */
- dpp);
+ dpp,
+ null_yield);
if (r == -ECANCELED || r == -ENOENT) {
/* Has already been overwritten, meaning another rgw process already
* copied it out */
nullptr, /* string *petag */
nullptr, /* void (*progress_cb)(off_t, void *) */
nullptr, /* void *progress_data */
- dpp);
+ dpp,
+ null_yield);
if (ret == -ECANCELED || ret == -ENOENT) {
/* Has already been overwritten, meaning another rgw process already
* copied it out */
int RGWRados::Object::Write::_do_write_meta(uint64_t size, uint64_t accounted_size,
map<string, bufferlist>& attrs,
bool assume_noent, bool modify_tail,
- void *_index_op)
+ void *_index_op, optional_yield y)
{
RGWRados::Bucket::UpdateIndex *index_op = static_cast<RGWRados::Bucket::UpdateIndex *>(_index_op);
RGWRados *store = target->get_store();
if (!index_op->is_prepared()) {
tracepoint(rgw_rados, prepare_enter, req_id.c_str());
- r = index_op->prepare(CLS_RGW_OP_ADD, &state->write_tag);
+ r = index_op->prepare(CLS_RGW_OP_ADD, &state->write_tag, y);
tracepoint(rgw_rados, prepare_exit, req_id.c_str());
if (r < 0)
return r;
}
int RGWRados::Object::Write::write_meta(uint64_t size, uint64_t accounted_size,
- map<string, bufferlist>& attrs)
+ map<string, bufferlist>& attrs, optional_yield y)
{
RGWBucketInfo& bucket_info = target->get_bucket_info();
bool assume_noent = (meta.if_match == NULL && meta.if_nomatch == NULL);
int r;
if (assume_noent) {
- r = _do_write_meta(size, accounted_size, attrs, assume_noent, meta.modify_tail, (void *)&index_op);
+ r = _do_write_meta(size, accounted_size, attrs, assume_noent, meta.modify_tail, (void *)&index_op, y);
if (r == -EEXIST) {
assume_noent = false;
}
}
if (!assume_noent) {
- r = _do_write_meta(size, accounted_size, attrs, assume_noent, meta.modify_tail, (void *)&index_op);
+ r = _do_write_meta(size, accounted_size, attrs, assume_noent, meta.modify_tail, (void *)&index_op, y);
}
return r;
}
}
}
-int RGWRados::rewrite_obj(RGWBucketInfo& dest_bucket_info, const rgw_obj& obj, const DoutPrefixProvider *dpp)
+int RGWRados::rewrite_obj(RGWBucketInfo& dest_bucket_info, const rgw_obj& obj, const DoutPrefixProvider *dpp, optional_yield y)
{
map<string, bufferlist> attrset;
return copy_obj_data(rctx, dest_bucket_info, dest_bucket_info.placement_rule,
read_op, obj_size - 1, obj, NULL, mtime, attrset,
- 0, real_time(), NULL, dpp);
+ 0, real_time(), NULL, dpp, y);
}
struct obj_time_weight {
bool canceled = false;
ret = processor.complete(cb.get_data_len(), etag, mtime, set_mtime,
attrs, delete_at, nullptr, nullptr, nullptr,
- zones_trace, &canceled);
+ zones_trace, &canceled, null_yield);
if (ret < 0) {
goto set_err_state;
}
string *petag,
void (*progress_cb)(off_t, void *),
void *progress_data,
- const DoutPrefixProvider *dpp)
+ const DoutPrefixProvider *dpp,
+ optional_yield y)
{
int ret;
uint64_t obj_size;
if (copy_data) { /* refcounting tail wouldn't work here, just copy the data */
attrs.erase(RGW_ATTR_TAIL_TAG);
return copy_obj_data(obj_ctx, dest_bucket_info, dest_placement, read_op, obj_size - 1, dest_obj,
- mtime, real_time(), attrs, olh_epoch, delete_at, petag, dpp);
+ mtime, real_time(), attrs, olh_epoch, delete_at, petag, dpp, y);
}
RGWObjManifest::obj_iterator miter = astate->manifest.obj_begin();
write_op.meta.delete_at = delete_at;
write_op.meta.modify_tail = !copy_itself;
- ret = write_op.write_meta(obj_size, astate->accounted_size, attrs);
+ ret = write_op.write_meta(obj_size, astate->accounted_size, attrs, y);
if (ret < 0) {
goto done_ret;
}
uint64_t olh_epoch,
real_time delete_at,
string *petag,
- const DoutPrefixProvider *dpp)
+ const DoutPrefixProvider *dpp,
+ optional_yield y)
{
string tag;
append_rand_alpha(cct, tag, tag, 32);
using namespace rgw::putobj;
AtomicObjectProcessor processor(&aio, this, dest_bucket_info, &dest_placement,
dest_bucket_info.owner, obj_ctx,
- dest_obj, olh_epoch, tag, dpp, null_yield);
+ dest_obj, olh_epoch, tag, dpp, y);
int ret = processor.prepare();
if (ret < 0)
return ret;
}
return processor.complete(accounted_size, etag, mtime, set_mtime, attrs, delete_at,
- nullptr, nullptr, nullptr, nullptr, nullptr);
+ nullptr, nullptr, nullptr, nullptr, nullptr, y);
}
int RGWRados::transition_obj(RGWObjectCtx& obj_ctx,
const rgw_placement_rule& placement_rule,
const real_time& mtime,
uint64_t olh_epoch,
- const DoutPrefixProvider *dpp)
+ const DoutPrefixProvider *dpp,
+ optional_yield y)
{
map<string, bufferlist> attrs;
real_time read_mtime;
olh_epoch,
real_time(),
nullptr /* petag */,
- dpp);
+ dpp,
+ y);
if (ret < 0) {
return ret;
}
* obj: name of the object to delete
* Returns: 0 on success, -ERR# otherwise.
*/
-int RGWRados::Object::Delete::delete_obj()
+int RGWRados::Object::Delete::delete_obj(optional_yield y)
{
RGWRados *store = target->get_store();
rgw_obj& src_obj = target->get_obj();
index_op.set_zones_trace(params.zones_trace);
index_op.set_bilog_flags(params.bilog_flags);
- r = index_op.prepare(CLS_RGW_OP_DEL, &state->write_tag);
+ r = index_op.prepare(CLS_RGW_OP_DEL, &state->write_tag, y);
if (r < 0)
return r;
del_op.params.expiration_time = expiration_time;
del_op.params.zones_trace = zones_trace;
- return del_op.delete_obj();
+ return del_op.delete_obj(null_yield);
}
int RGWRados::delete_raw_obj(const rgw_raw_obj& obj)
{
map<string, bufferlist> attrs;
attrs[name] = bl;
- return set_attrs(ctx, bucket_info, obj, attrs, NULL);
+ return set_attrs(ctx, bucket_info, obj, attrs, NULL, null_yield);
}
int RGWRados::set_attrs(void *ctx, const RGWBucketInfo& bucket_info, rgw_obj& src_obj,
map<string, bufferlist>& attrs,
- map<string, bufferlist>* rmattrs)
+ map<string, bufferlist>* rmattrs,
+ optional_yield y)
{
rgw_obj obj = src_obj;
if (obj.key.instance == "null") {
string tag;
append_rand_alpha(cct, tag, tag, 32);
state->write_tag = tag;
- r = index_op.prepare(CLS_RGW_OP_ADD, &state->write_tag);
+ r = index_op.prepare(CLS_RGW_OP_ADD, &state->write_tag, y);
if (r < 0)
return r;
return 0;
}
-int RGWRados::Bucket::UpdateIndex::prepare(RGWModifyOp op, const string *write_tag)
+int RGWRados::Bucket::UpdateIndex::prepare(RGWModifyOp op, const string *write_tag, optional_yield y)
{
if (blind) {
return 0;
}
int r = guard_reshard(nullptr, [&](BucketShard *bs) -> int {
- return store->cls_obj_prepare_op(*bs, op, optag, obj, bilog_flags, zones_trace);
+ return store->cls_obj_prepare_op(*bs, op, optag, obj, bilog_flags, y, zones_trace);
});
if (r < 0) {
}
int RGWRados::cls_obj_prepare_op(BucketShard& bs, RGWModifyOp op, string& tag,
- rgw_obj& obj, uint16_t bilog_flags, rgw_zone_set *_zones_trace)
+ rgw_obj& obj, uint16_t bilog_flags, optional_yield y, rgw_zone_set *_zones_trace)
{
rgw_zone_set zones_trace;
if (_zones_trace) {
cls_rgw_obj_key key(obj.key.get_index_key_name(), obj.key.instance);
cls_rgw_guard_bucket_resharding(o, -ERR_BUSY_RESHARDING);
cls_rgw_bucket_prepare_op(o, op, tag, key, obj.key.get_loc(), svc.zone->get_zone().log_data, bilog_flags, zones_trace);
- return bs.index_ctx.operate(bs.bucket_obj, &o);
+ return rgw_rados_operate(bs.index_ctx, bs.bucket_obj, &o, y);
}
int RGWRados::cls_obj_complete_op(BucketShard& bs, const rgw_obj& obj, RGWModifyOp op, string& tag,
int RGWRados::delete_obj_aio(const rgw_obj& obj,
RGWBucketInfo& bucket_info, RGWObjState *astate,
- list<librados::AioCompletion *>& handles, bool keep_index_consistent)
+ list<librados::AioCompletion *>& handles, bool keep_index_consistent,
+ optional_yield y)
{
rgw_rados_ref ref;
int ret = get_obj_head_ref(bucket_info, obj, &ref);
RGWRados::Bucket bop(this, bucket_info);
RGWRados::Bucket::UpdateIndex index_op(&bop, obj);
- ret = index_op.prepare(CLS_RGW_OP_DEL, &astate->write_tag);
+ ret = index_op.prepare(CLS_RGW_OP_DEL, &astate->write_tag, y);
if (ret < 0) {
lderr(cct) << "ERROR: failed to prepare index op with ret=" << ret << dendl;
return ret;
int _do_write_meta(uint64_t size, uint64_t accounted_size,
map<std::string, bufferlist>& attrs,
bool modify_tail, bool assume_noent,
- void *index_op);
+ void *index_op, optional_yield y);
int write_meta(uint64_t size, uint64_t accounted_size,
- map<std::string, bufferlist>& attrs);
+ map<std::string, bufferlist>& attrs, optional_yield y);
int write_data(const char *data, uint64_t ofs, uint64_t len, bool exclusive);
const req_state* get_req_state() {
return (req_state *)target->get_ctx().get_private();
explicit Delete(RGWRados::Object *_target) : target(_target) {}
- int delete_obj();
+ int delete_obj(optional_yield y);
};
struct Stat {
zones_trace = _zones_trace;
}
- int prepare(RGWModifyOp, const string *write_tag);
+ int prepare(RGWModifyOp, const string *write_tag, optional_yield y);
int complete(int64_t poolid, uint64_t epoch, uint64_t size,
uint64_t accounted_size, ceph::real_time& ut,
const string& etag, const string& content_type,
ATTRSMOD_MERGE = 2
};
- int rewrite_obj(RGWBucketInfo& dest_bucket_info, const rgw_obj& obj, const DoutPrefixProvider *dpp);
+ int rewrite_obj(RGWBucketInfo& dest_bucket_info, const rgw_obj& obj, const DoutPrefixProvider *dpp, optional_yield y);
int stat_remote_obj(RGWObjectCtx& obj_ctx,
const rgw_user& user_id,
string *petag,
void (*progress_cb)(off_t, void *),
void *progress_data,
- const DoutPrefixProvider *dpp);
+ const DoutPrefixProvider *dpp,
+ optional_yield y);
int copy_obj_data(RGWObjectCtx& obj_ctx,
RGWBucketInfo& dest_bucket_info,
uint64_t olh_epoch,
ceph::real_time delete_at,
string *petag,
- const DoutPrefixProvider *dpp);
+ const DoutPrefixProvider *dpp,
+ optional_yield y);
int transition_obj(RGWObjectCtx& obj_ctx,
RGWBucketInfo& bucket_info,
const rgw_placement_rule& placement_rule,
const real_time& mtime,
uint64_t olh_epoch,
- const DoutPrefixProvider *dpp);
+ const DoutPrefixProvider *dpp,
+ optional_yield y);
int check_bucket_empty(RGWBucketInfo& bucket_info);
int set_attrs(void *ctx, const RGWBucketInfo& bucket_info, rgw_obj& obj,
map<string, bufferlist>& attrs,
- map<string, bufferlist>* rmattrs);
+ map<string, bufferlist>* rmattrs,
+ optional_yield y);
int get_obj_state(RGWObjectCtx *rctx, const RGWBucketInfo& bucket_info, const rgw_obj& obj, RGWObjState **state,
bool follow_olh, bool assume_noent = false);
int put_linked_bucket_info(RGWBucketInfo& info, bool exclusive, ceph::real_time mtime, obj_version *pep_objv,
map<string, bufferlist> *pattrs, bool create_entry_point);
- int cls_obj_prepare_op(BucketShard& bs, RGWModifyOp op, string& tag, rgw_obj& obj, uint16_t bilog_flags, rgw_zone_set *zones_trace = nullptr);
+ int cls_obj_prepare_op(BucketShard& bs, RGWModifyOp op, string& tag, rgw_obj& obj, uint16_t bilog_flags, optional_yield y, rgw_zone_set *zones_trace = nullptr);
int cls_obj_complete_op(BucketShard& bs, const rgw_obj& obj, RGWModifyOp op, string& tag, int64_t pool, uint64_t epoch,
rgw_bucket_dir_entry& ent, RGWObjCategory category, list<rgw_obj_index_key> *remove_objs, uint16_t bilog_flags, rgw_zone_set *zones_trace = nullptr);
int cls_obj_complete_add(BucketShard& bs, const rgw_obj& obj, string& tag, int64_t pool, uint64_t epoch, rgw_bucket_dir_entry& ent,
int delete_raw_obj_aio(const rgw_raw_obj& obj, list<librados::AioCompletion *>& handles);
int delete_obj_aio(const rgw_obj& obj, RGWBucketInfo& info, RGWObjState *astate,
- list<librados::AioCompletion *>& handles, bool keep_index_consistent);
+ list<librados::AioCompletion *>& handles, bool keep_index_consistent,
+ optional_yield y);
/* mfa/totp stuff */
private:
int RGWDataAccess::Object::put(bufferlist& data,
map<string, bufferlist>& attrs,
- const DoutPrefixProvider *dpp)
+ const DoutPrefixProvider *dpp,
+ optional_yield y)
{
RGWRados *store = sd->store;
CephContext *cct = store->ctx();
using namespace rgw::putobj;
AtomicObjectProcessor processor(&aio, store, bucket_info, nullptr,
owner.get_id(), obj_ctx, obj, olh_epoch,
- req_id, dpp, null_yield);
+ req_id, dpp, y);
int ret = processor.prepare();
if (ret < 0)
attrs, delete_at,
nullptr, nullptr,
puser_data,
- nullptr, nullptr);
+ nullptr, nullptr, y);
}
void RGWDataAccess::Object::set_policy(const RGWAccessControlPolicy& policy)
bucket(_bucket),
key(_key) {}
public:
- int put(bufferlist& data, map<string, bufferlist>& attrs, const DoutPrefixProvider *dpp); /* might modify attrs */
+ int put(bufferlist& data, map<string, bufferlist>& attrs, const DoutPrefixProvider *dpp, optional_yield y); /* might modify attrs */
void set_mtime(const ceph::real_time& _mtime) {
mtime = _mtime;