From 3781e87de821c51d795a611d28f08c83af2b4f50 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Tue, 13 Oct 2020 09:56:11 -0400 Subject: [PATCH] rgw: RGWSimpleRadosWriteAttrsCR supports exclusive create Signed-off-by: Casey Bodley --- src/rgw/rgw_cr_rados.cc | 6 +++--- src/rgw/rgw_cr_rados.h | 18 +++++++++++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/rgw/rgw_cr_rados.cc b/src/rgw/rgw_cr_rados.cc index 48bcee629184b..52519600141b1 100644 --- a/src/rgw/rgw_cr_rados.cc +++ b/src/rgw/rgw_cr_rados.cc @@ -173,7 +173,7 @@ int RGWAsyncPutSystemObjAttrs::_send_request(const DoutPrefixProvider *dpp) 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); } @@ -181,9 +181,9 @@ int RGWAsyncPutSystemObjAttrs::_send_request(const DoutPrefixProvider *dpp) RGWAsyncPutSystemObjAttrs::RGWAsyncPutSystemObjAttrs(const DoutPrefixProvider *_dpp, RGWCoroutine *caller, RGWAioCompletionNotifier *cn, RGWSI_SysObj *_svc, RGWObjVersionTracker *_objv_tracker, const rgw_raw_obj& _obj, - map _attrs) + map _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; diff --git a/src/rgw/rgw_cr_rados.h b/src/rgw/rgw_cr_rados.h index f79a26045738e..f88b3b556cc06 100644 --- a/src/rgw/rgw_cr_rados.h +++ b/src/rgw/rgw_cr_rados.h @@ -357,13 +357,14 @@ class RGWAsyncPutSystemObjAttrs : public RGWAsyncRadosRequest { RGWSI_SysObj *svc; rgw_raw_obj obj; std::map 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 _attrs); + RGWObjVersionTracker *_objv_tracker, const rgw_raw_obj& _obj, + std::map _attrs, bool exclusive); RGWObjVersionTracker objv_tracker; }; @@ -574,17 +575,19 @@ class RGWSimpleRadosWriteAttrsCR : public RGWSimpleCoroutine { rgw_raw_obj obj; std::map 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 _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(); @@ -599,7 +602,8 @@ public: 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; } -- 2.39.5