]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: RGWSimpleRadosWriteAttrsCR supports exclusive create
authorCasey Bodley <cbodley@redhat.com>
Tue, 13 Oct 2020 13:56:11 +0000 (09:56 -0400)
committerAdam C. Emerson <aemerson@redhat.com>
Mon, 13 Sep 2021 16:27:48 +0000 (12:27 -0400)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_cr_rados.cc
src/rgw/rgw_cr_rados.h

index 48bcee629184b9029912609d61f47d8ade93b282..52519600141b1ce28bf0aa597230455e6b9bf5fb 100644 (file)
@@ -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<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;
index f79a26045738e011021292078b16ce3e279572d8..f88b3b556cc066d3f773836ed85a4efa93f9a28d 100644 (file)
@@ -357,13 +357,14 @@ class RGWAsyncPutSystemObjAttrs : public RGWAsyncRadosRequest {
   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;
 };
@@ -574,17 +575,19 @@ class RGWSimpleRadosWriteAttrsCR : public RGWSimpleCoroutine {
 
   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();
@@ -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;
   }