From: Adam C. Emerson Date: Tue, 18 May 2021 22:34:43 +0000 (-0400) Subject: rgw: Add RGWRadosRemoveOidCR X-Git-Tag: v18.0.0~787^2~93 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=899596f650a9317beff476dca094bb68d752ee75;p=ceph.git rgw: Add RGWRadosRemoveOidCR A more generally applicable way of removing objects in coroutines. Signed-off-by: Adam C. Emerson --- diff --git a/src/rgw/rgw_cr_rados.cc b/src/rgw/rgw_cr_rados.cc index 6c4c3db518d4..6847be5304fb 100644 --- a/src/rgw/rgw_cr_rados.cc +++ b/src/rgw/rgw_cr_rados.cc @@ -449,6 +449,59 @@ int RGWRadosRemoveCR::request_complete() return r; } +RGWRadosRemoveOidCR::RGWRadosRemoveOidCR(rgw::sal::RadosStore* store, + librados::IoCtx&& ioctx, + std::string_view oid, + RGWObjVersionTracker* objv_tracker) + : RGWSimpleCoroutine(store->ctx()), ioctx(std::move(ioctx)), + oid(std::string(oid)), objv_tracker(objv_tracker) +{ + set_description() << "remove dest=" << oid; +} + +RGWRadosRemoveOidCR::RGWRadosRemoveOidCR(rgw::sal::RadosStore* store, + RGWSI_RADOS::Obj& obj, + RGWObjVersionTracker* objv_tracker) + : RGWSimpleCoroutine(store->ctx()), + ioctx(librados::IoCtx(obj.get_ref().pool.ioctx())), + oid(obj.get_ref().obj.oid), + objv_tracker(objv_tracker) +{ + set_description() << "remove dest=" << oid; +} + +RGWRadosRemoveOidCR::RGWRadosRemoveOidCR(rgw::sal::RadosStore* store, + RGWSI_RADOS::Obj&& obj, + RGWObjVersionTracker* objv_tracker) + : RGWSimpleCoroutine(store->ctx()), + ioctx(std::move(obj.get_ref().pool.ioctx())), + oid(std::move(obj.get_ref().obj.oid)), + objv_tracker(objv_tracker) +{ + set_description() << "remove dest=" << oid; +} + +int RGWRadosRemoveOidCR::send_request(const DoutPrefixProvider *dpp) +{ + librados::ObjectWriteOperation op; + if (objv_tracker) { + objv_tracker->prepare_op_for_write(&op); + } + op.remove(); + + cn = stack->create_completion_notifier(); + return ioctx.aio_operate(oid, cn->completion(), &op); +} + +int RGWRadosRemoveOidCR::request_complete() +{ + int r = cn->completion()->get_return_value(); + + set_status() << "request complete; ret=" << r; + + return r; +} + RGWSimpleRadosLockCR::RGWSimpleRadosLockCR(RGWAsyncRadosProcessor *_async_rados, rgw::sal::RadosStore* _store, const rgw_raw_obj& _obj, const string& _lock_name, diff --git a/src/rgw/rgw_cr_rados.h b/src/rgw/rgw_cr_rados.h index 246131d3e001..bac572223d84 100644 --- a/src/rgw/rgw_cr_rados.h +++ b/src/rgw/rgw_cr_rados.h @@ -724,6 +724,29 @@ public: int request_complete() override; }; +class RGWRadosRemoveOidCR : public RGWSimpleCoroutine { + librados::IoCtx ioctx; + const std::string oid; + RGWObjVersionTracker* objv_tracker; + boost::intrusive_ptr cn; + +public: + RGWRadosRemoveOidCR(rgw::sal::RadosStore* store, + librados::IoCtx&& ioctx, std::string_view oid, + RGWObjVersionTracker* objv_tracker = nullptr); + + RGWRadosRemoveOidCR(rgw::sal::RadosStore* store, + RGWSI_RADOS::Obj& obj, + RGWObjVersionTracker* objv_tracker = nullptr); + + RGWRadosRemoveOidCR(rgw::sal::RadosStore* store, + RGWSI_RADOS::Obj&& obj, + RGWObjVersionTracker* objv_tracker = nullptr); + + int send_request(const DoutPrefixProvider *dpp) override; + int request_complete() override; +}; + class RGWSimpleRadosLockCR : public RGWSimpleCoroutine { RGWAsyncRadosProcessor *async_rados; rgw::sal::RadosStore* store;