From a88eba45bae1131368d41790ecb9f10ec8883ea3 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Thu, 28 Jun 2018 17:22:23 -0700 Subject: [PATCH] rgw: async cr template for crs that return data Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_cr_rados.h | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/src/rgw/rgw_cr_rados.h b/src/rgw/rgw_cr_rados.h index 6a6d67b422e..85796199892 100644 --- a/src/rgw/rgw_cr_rados.h +++ b/src/rgw/rgw_cr_rados.h @@ -155,6 +155,66 @@ class RGWSimpleWriteOnlyAsyncCR : public RGWSimpleCoroutine { }; +template +class RGWSimpleAsyncCR : public RGWSimpleCoroutine { + RGWAsyncRadosProcessor *async_rados; + RGWRados *store; + + P params; + std::shared_ptr result; + + class Request : public RGWAsyncRadosRequest { + RGWRados *store; + P params; + std::shared_ptr result; + protected: + int _send_request() override; + public: + Request(RGWCoroutine *caller, + RGWAioCompletionNotifier *cn, + RGWRados *_store, + const P& _params, + std::shared_ptr& _result) : RGWAsyncRadosRequest(caller, cn), + store(_store), + params(_params), + result(_result) {} + } *req{nullptr}; + + public: + RGWSimpleAsyncCR(RGWAsyncRadosProcessor *_async_rados, + RGWRados *_store, + const P& _params, + std::shared_ptr& _result) : RGWSimpleCoroutine(_store->ctx()), + async_rados(_async_rados), + store(_store), + params(_params), + result(_result) {} + + ~RGWSimpleAsyncCR() 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; RGWObjVersionTracker objv_tracker; -- 2.39.5