From: Casey Bodley Date: Mon, 22 Feb 2016 21:42:39 +0000 (-0500) Subject: rgw: add RGWStatObjCR for async raw_obj_stat X-Git-Tag: v10.1.0~222^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b8a4a9d9a460a2464944cee914161a6f0675e3a2;p=ceph.git rgw: add RGWStatObjCR for async raw_obj_stat Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_cr_rados.cc b/src/rgw/rgw_cr_rados.cc index 0b5243f7dd3..0d5fa5dd9f8 100644 --- a/src/rgw/rgw_cr_rados.cc +++ b/src/rgw/rgw_cr_rados.cc @@ -611,3 +611,39 @@ int RGWRadosTimelogAddCR::request_complete() return r; } + +int RGWAsyncStatObj::_send_request() +{ + return store->raw_obj_stat(obj, psize, pmtime, pepoch, + nullptr, nullptr, objv_tracker); +} + +RGWStatObjCR::RGWStatObjCR(RGWAsyncRadosProcessor *async_rados, RGWRados *store, + const rgw_obj& obj, uint64_t *psize, + time_t *pmtime, uint64_t *pepoch, + RGWObjVersionTracker *objv_tracker) + : RGWSimpleCoroutine(store->ctx()), store(store), async_rados(async_rados), + obj(obj), psize(psize), pmtime(pmtime), pepoch(pepoch), + objv_tracker(objv_tracker) +{ +} + +RGWStatObjCR::~RGWStatObjCR() +{ + if (req) { + req->finish(); + } +} + +int RGWStatObjCR::send_request() +{ + req = new RGWAsyncStatObj(stack->create_completion_notifier(), + store, obj, psize, pmtime, pepoch, objv_tracker); + async_rados->queue(req); + return 0; +} + +int RGWStatObjCR::request_complete() +{ + return req->get_ret_status(); +} diff --git a/src/rgw/rgw_cr_rados.h b/src/rgw/rgw_cr_rados.h index e2692741d2a..3a29b64bec0 100644 --- a/src/rgw/rgw_cr_rados.h +++ b/src/rgw/rgw_cr_rados.h @@ -887,5 +887,42 @@ public: int request_complete(); }; +class RGWAsyncStatObj : public RGWAsyncRadosRequest { + RGWRados *store; + rgw_obj obj; + uint64_t *psize; + time_t *pmtime; + uint64_t *pepoch; + RGWObjVersionTracker *objv_tracker; +protected: + int _send_request() override; +public: + RGWAsyncStatObj(RGWAioCompletionNotifier *cn, RGWRados *store, + const rgw_obj& obj, uint64_t *psize = nullptr, + time_t *pmtime = nullptr, uint64_t *pepoch = nullptr, + RGWObjVersionTracker *objv_tracker = nullptr) + : RGWAsyncRadosRequest(cn), store(store), obj(obj), psize(psize), + pmtime(pmtime), pepoch(pepoch), objv_tracker(objv_tracker) {} +}; + +class RGWStatObjCR : public RGWSimpleCoroutine { + RGWRados *store; + RGWAsyncRadosProcessor *async_rados; + rgw_obj obj; + uint64_t *psize; + time_t *pmtime; + uint64_t *pepoch; + RGWObjVersionTracker *objv_tracker; + RGWAsyncStatObj *req = nullptr; + public: + RGWStatObjCR(RGWAsyncRadosProcessor *async_rados, RGWRados *store, + const rgw_obj& obj, uint64_t *psize = nullptr, + time_t *pmtime = nullptr, uint64_t *pepoch = nullptr, + RGWObjVersionTracker *objv_tracker = nullptr); + ~RGWStatObjCR(); + + int send_request() override; + int request_complete() override; +}; #endif