From: Casey Bodley Date: Tue, 13 Oct 2020 13:56:11 +0000 (-0400) Subject: rgw: RGWSimpleRadosWriteAttrsCR supports exclusive create X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=2348f1891c58e49b1901a70e48118c39860bbfb3;p=ceph.git rgw: RGWSimpleRadosWriteAttrsCR supports exclusive create Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_cr_rados.cc b/src/rgw/rgw_cr_rados.cc index ee6e962ef3dda..14b4d934f483d 100644 --- a/src/rgw/rgw_cr_rados.cc +++ b/src/rgw/rgw_cr_rados.cc @@ -169,7 +169,7 @@ int RGWAsyncPutSystemObjAttrs::_send_request() 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(null_yield); } @@ -177,9 +177,9 @@ int RGWAsyncPutSystemObjAttrs::_send_request() RGWAsyncPutSystemObjAttrs::RGWAsyncPutSystemObjAttrs(RGWCoroutine *caller, RGWAioCompletionNotifier *cn, RGWSI_SysObj *_svc, RGWObjVersionTracker *_objv_tracker, const rgw_raw_obj& _obj, - map _attrs) + map _attrs, bool exclusive) : RGWAsyncRadosRequest(caller, cn), svc(_svc), - obj(_obj), attrs(std::move(_attrs)) + obj(_obj), attrs(std::move(_attrs)), exclusive(exclusive) { if (_objv_tracker) { objv_tracker = *_objv_tracker; diff --git a/src/rgw/rgw_cr_rados.h b/src/rgw/rgw_cr_rados.h index 8d5c9f8ac60bd..8cb92ed4c24b3 100644 --- a/src/rgw/rgw_cr_rados.h +++ b/src/rgw/rgw_cr_rados.h @@ -341,13 +341,14 @@ class RGWAsyncPutSystemObjAttrs : public RGWAsyncRadosRequest { RGWSI_SysObj *svc; rgw_raw_obj obj; map attrs; + bool exclusive; protected: int _send_request() override; public: RGWAsyncPutSystemObjAttrs(RGWCoroutine *caller, RGWAioCompletionNotifier *cn, RGWSI_SysObj *_svc, RGWObjVersionTracker *_objv_tracker, const rgw_raw_obj& _obj, - map _attrs); + map _attrs, bool exclusive); RGWObjVersionTracker objv_tracker; }; @@ -551,16 +552,18 @@ class RGWSimpleRadosWriteAttrsCR : public RGWSimpleCoroutine { rgw_raw_obj obj; map attrs; + bool exclusive; RGWAsyncPutSystemObjAttrs *req = nullptr; public: RGWSimpleRadosWriteAttrsCR(RGWAsyncRadosProcessor *_async_rados, RGWSI_SysObj *_svc, const rgw_raw_obj& _obj, map _attrs, - RGWObjVersionTracker *objv_tracker = nullptr) + RGWObjVersionTracker *objv_tracker = nullptr, + bool exclusive = false) : RGWSimpleCoroutine(_svc->ctx()), 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(); @@ -575,7 +578,8 @@ public: int send_request() override { req = new RGWAsyncPutSystemObjAttrs(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; }