From: Yehuda Sadeh Date: Thu, 28 Jun 2018 22:26:07 +0000 (-0700) Subject: rgw: template helper for async crs X-Git-Tag: v14.1.0~616^2~70 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d672cfba0080db0c94b2a7bb1bb01efbf578e3a3;p=ceph.git rgw: template helper for async crs Signed-off-by: Yehuda Sadeh --- diff --git a/src/rgw/rgw_cr_rados.h b/src/rgw/rgw_cr_rados.h index b6789483b77b..6a6d67b422e9 100644 --- a/src/rgw/rgw_cr_rados.h +++ b/src/rgw/rgw_cr_rados.h @@ -101,6 +101,59 @@ public: } }; +template +class RGWSimpleWriteOnlyAsyncCR : public RGWSimpleCoroutine { + RGWAsyncRadosProcessor *async_rados; + RGWRados *store; + + P params; + + class Request : public RGWAsyncRadosRequest { + RGWRados *store; + P params; + protected: + int _send_request() override; + public: + Request(RGWCoroutine *caller, + RGWAioCompletionNotifier *cn, + RGWRados *store, + const P& _params) : RGWAsyncRadosRequest(caller, cn), + store(store), + params(_params) {} + } *req{nullptr}; + + public: + RGWSimpleWriteOnlyAsyncCR(RGWAsyncRadosProcessor *_async_rados, + RGWRados *_store, + const P& _params) : RGWSimpleCoroutine(_store->ctx()), + async_rados(_async_rados), + store(_store), + params(_params) {} + + ~RGWSimpleWriteOnlyAsyncCR() override { + request_cleanup(); + } + void request_cleanup() override { + if (req) { + req->finish(); + req = NULL; + } + } + + int send_request() override { + req = new Request(this, + stack->create_completion_notifier(), + store, + params); + + async_rados->queue(req); + return 0; + } + int request_complete() override { + return req->get_ret_status(); + } +}; + class RGWAsyncGetSystemObj : public RGWAsyncRadosRequest { RGWSysObjectCtx obj_ctx;