auto sysobj = obj_ctx.get_obj(obj);
return sysobj.wop()
.set_objv_tracker(&objv_tracker)
- .set_exclusive(false)
+ .set_exclusive(exclusive)
.set_attrs(attrs)
.write_attrs(dpp, null_yield);
}
RGWAsyncPutSystemObjAttrs::RGWAsyncPutSystemObjAttrs(const DoutPrefixProvider *_dpp, RGWCoroutine *caller, RGWAioCompletionNotifier *cn,
RGWSI_SysObj *_svc,
RGWObjVersionTracker *_objv_tracker, const rgw_raw_obj& _obj,
- map<string, bufferlist> _attrs)
+ map<string, bufferlist> _attrs, bool exclusive)
: RGWAsyncRadosRequest(caller, cn), dpp(_dpp), svc(_svc),
- obj(_obj), attrs(std::move(_attrs))
+ obj(_obj), attrs(std::move(_attrs)), exclusive(exclusive)
{
if (_objv_tracker) {
objv_tracker = *_objv_tracker;
RGWSI_SysObj *svc;
rgw_raw_obj obj;
std::map<std::string, bufferlist> attrs;
+ bool exclusive;
protected:
int _send_request(const DoutPrefixProvider *dpp) override;
public:
RGWAsyncPutSystemObjAttrs(const DoutPrefixProvider *dpp, RGWCoroutine *caller, RGWAioCompletionNotifier *cn, RGWSI_SysObj *_svc,
- RGWObjVersionTracker *_objv_tracker, const rgw_raw_obj& _obj,
- std::map<std::string, bufferlist> _attrs);
+ RGWObjVersionTracker *_objv_tracker, const rgw_raw_obj& _obj,
+ std::map<std::string, bufferlist> _attrs, bool exclusive);
RGWObjVersionTracker objv_tracker;
};
rgw_raw_obj obj;
std::map<std::string, bufferlist> attrs;
+ bool exclusive;
RGWAsyncPutSystemObjAttrs *req = nullptr;
public:
- RGWSimpleRadosWriteAttrsCR(const DoutPrefixProvider *_dpp,
+ RGWSimpleRadosWriteAttrsCR(const DoutPrefixProvider *_dpp,
RGWAsyncRadosProcessor *_async_rados,
RGWSI_SysObj *_svc, const rgw_raw_obj& _obj,
std::map<std::string, bufferlist> _attrs,
- RGWObjVersionTracker *objv_tracker = nullptr)
- : RGWSimpleCoroutine(_svc->ctx()), dpp(_dpp), async_rados(_async_rados),
+ RGWObjVersionTracker *objv_tracker = nullptr,
+ bool exclusive = false)
+ : RGWSimpleCoroutine(_svc->ctx()), dpp(_dpp), async_rados(_async_rados),
svc(_svc), objv_tracker(objv_tracker), obj(_obj),
- attrs(std::move(_attrs)) {
+ attrs(std::move(_attrs)), exclusive(exclusive) {
}
~RGWSimpleRadosWriteAttrsCR() override {
request_cleanup();
int send_request(const DoutPrefixProvider *dpp) override {
req = new RGWAsyncPutSystemObjAttrs(dpp, this, stack->create_completion_notifier(),
- svc, objv_tracker, obj, std::move(attrs));
+ svc, objv_tracker, obj, std::move(attrs),
+ exclusive);
async_rados->queue(req);
return 0;
}