]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add RGWStatObjCR for async raw_obj_stat
authorCasey Bodley <cbodley@redhat.com>
Mon, 22 Feb 2016 21:42:39 +0000 (16:42 -0500)
committerCasey Bodley <cbodley@redhat.com>
Fri, 4 Mar 2016 22:04:08 +0000 (17:04 -0500)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_cr_rados.cc
src/rgw/rgw_cr_rados.h

index 0b5243f7dd3375b9045996ff77b8f4d056e51433..0d5fa5dd9f8ae14fb9935f078b7f550287c713f5 100644 (file)
@@ -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();
+}
index e2692741d2abc1aaf5dc66e6f14a22ba08a61ba1..3a29b64bec08311db7a6588a810dcf4d02df0289 100644 (file)
@@ -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