From: Casey Bodley Date: Fri, 20 Jan 2017 19:53:55 +0000 (-0500) Subject: rgw: add RGWRadosRemoveCR X-Git-Tag: v12.0.3~20^2~18 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=57b94899dccf0c0a63aabfd77af62608117f440e;p=ceph.git rgw: add RGWRadosRemoveCR Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_cr_rados.cc b/src/rgw/rgw_cr_rados.cc index d0307fe8e041..4d5b4ea8803a 100644 --- a/src/rgw/rgw_cr_rados.cc +++ b/src/rgw/rgw_cr_rados.cc @@ -315,6 +315,40 @@ int RGWRadosRemoveOmapKeysCR::send_request() { return ref.ioctx.aio_operate(ref.oid, cn->completion(), &op); } +RGWRadosRemoveCR::RGWRadosRemoveCR(RGWRados *store, const rgw_raw_obj& obj) + : RGWSimpleCoroutine(store->ctx()), store(store), obj(obj) +{ + set_description() << "remove dest=" << obj; +} + +int RGWRadosRemoveCR::send_request() +{ + auto rados = store->get_rados_handle(); + int r = rados->ioctx_create(obj.pool.name.c_str(), ioctx); + if (r < 0) { + lderr(cct) << "ERROR: failed to open pool (" << obj.pool.name << ") ret=" << r << dendl; + return r; + } + ioctx.locator_set_key(obj.loc); + + set_status() << "send request"; + + librados::ObjectWriteOperation op; + op.remove(); + + cn = stack->create_completion_notifier(); + return ioctx.aio_operate(obj.oid, cn->completion(), &op); +} + +int RGWRadosRemoveCR::request_complete() +{ + int r = cn->completion()->get_return_value(); + + set_status() << "request complete; ret=" << r; + + return r; +} + RGWSimpleRadosLockCR::RGWSimpleRadosLockCR(RGWAsyncRadosProcessor *_async_rados, RGWRados *_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 f92fc7848487..65d53a4e2946 100644 --- a/src/rgw/rgw_cr_rados.h +++ b/src/rgw/rgw_cr_rados.h @@ -1,6 +1,8 @@ #ifndef CEPH_RGW_CR_RADOS_H #define CEPH_RGW_CR_RADOS_H +#include +#include "include/assert.h" #include "rgw_coroutine.h" #include "rgw_rados.h" #include "common/WorkQueue.h" @@ -464,6 +466,19 @@ public: } }; +class RGWRadosRemoveCR : public RGWSimpleCoroutine { + RGWRados *store; + librados::IoCtx ioctx; + const rgw_raw_obj obj; + boost::intrusive_ptr cn; + +public: + RGWRadosRemoveCR(RGWRados *store, const rgw_raw_obj& obj); + + int send_request(); + int request_complete(); +}; + class RGWSimpleRadosLockCR : public RGWSimpleCoroutine { RGWAsyncRadosProcessor *async_rados; RGWRados *store;