]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: librados aio wait_for_safe, not wait_for_complete 11204/head
authorSage Weil <sage@redhat.com>
Mon, 26 Sep 2016 15:19:50 +0000 (11:19 -0400)
committerSage Weil <sage@redhat.com>
Mon, 26 Sep 2016 15:19:50 +0000 (11:19 -0400)
We want to wait for the op to be durable, not ordered.

Note that wait_for_safe works for read ops as well, despite a
name that implies an update.

Signed-off-by: Sage Weil <sage@redhat.com>
src/rgw/rgw_bucket.cc
src/rgw/rgw_coroutine.cc
src/rgw/rgw_metadata.cc
src/rgw/rgw_rados.cc

index df420ccb731b176a1f02c1a8d603531627b2afb7..f19ec7fc894c1bfedf920522e74fc3ea249e9ac6 100644 (file)
@@ -588,7 +588,7 @@ int rgw_remove_bucket(RGWRados *store, rgw_bucket& bucket, bool delete_children)
 static int aio_wait(librados::AioCompletion *handle)
 {
   librados::AioCompletion *c = (librados::AioCompletion *)handle;
-  c->wait_for_complete();
+  c->wait_for_safe();
   int ret = c->get_return_value();
   c->release();
   return ret;
index cf9111b0fa058b37e6d78d4d1121c78d80c9a10d..7cebd27e5587d8562f861306d635a329d79462a0 100644 (file)
@@ -382,7 +382,8 @@ static void _aio_completion_notifier_cb(librados::completion_t cb, void *arg)
 
 RGWAioCompletionNotifier::RGWAioCompletionNotifier(RGWCompletionManager *_mgr, void *_user_data) : completion_mgr(_mgr),
                                                                          user_data(_user_data), lock("RGWAioCompletionNotifier"), registered(true) {
-  c = librados::Rados::aio_create_completion((void *)this, _aio_completion_notifier_cb, NULL);
+  c = librados::Rados::aio_create_completion((void *)this, NULL,
+                                            _aio_completion_notifier_cb);
 }
 
 RGWAioCompletionNotifier *RGWCoroutinesStack::create_completion_notifier()
index 23805647cd72e14f079f420e1659187ab2fd07c2..f196fcaa800e9561c5b484974c00f28b5d337ae2 100644 (file)
@@ -190,7 +190,8 @@ class RGWMetadataLogInfoCompletion : public RefCountedObject {
 public:
   RGWMetadataLogInfoCompletion(RGWMetadataLogInfo *_pinfo, RGWCompletionManager *_cm, void *_uinfo, int *_pret) :
                                                pinfo(_pinfo), completion_manager(_cm), user_info(_uinfo), pret(_pret) {
-    completion = librados::Rados::aio_create_completion((void *)this, _mdlog_info_completion, NULL);
+    completion = librados::Rados::aio_create_completion((void *)this, NULL,
+                                                       _mdlog_info_completion);
   }
 
   ~RGWMetadataLogInfoCompletion() {
index 9bbc4628c666c9ac18befff0e16d3411706cf167..0933702143c92711ac028400779f7699fd829344 100644 (file)
@@ -6434,7 +6434,7 @@ int RGWRados::aio_put_obj_data(void *ctx, rgw_obj& obj, bufferlist& bl,
 int RGWRados::aio_wait(void *handle)
 {
   AioCompletion *c = (AioCompletion *)handle;
-  c->wait_for_complete();
+  c->wait_for_safe();
   int ret = c->get_return_value();
   c->release();
   return ret;
@@ -6443,7 +6443,7 @@ int RGWRados::aio_wait(void *handle)
 bool RGWRados::aio_completed(void *handle)
 {
   AioCompletion *c = (AioCompletion *)handle;
-  return c->is_complete();
+  return c->is_safe();
 }
 
 class RGWRadosPutObj : public RGWGetDataCB
@@ -8256,7 +8256,7 @@ int RGWRados::Object::Stat::wait()
     return state.ret;
   }
 
-  state.completion->wait_for_complete();
+  state.completion->wait_for_safe();
   state.ret = state.completion->get_return_value();
   state.completion->release();
 
@@ -9201,7 +9201,7 @@ struct get_obj_data : public RefCountedObject {
     librados::AioCompletion *c = iter->second;
     lock.Unlock();
 
-    c->wait_for_complete_and_cb();
+    c->wait_for_safe_and_cb();
     int r = c->get_return_value();
 
     lock.Lock();
@@ -9232,7 +9232,7 @@ struct get_obj_data : public RefCountedObject {
 
     struct get_obj_aio_data *paio_data =  &aio_data.back(); /* last element */
 
-    librados::AioCompletion *c = librados::Rados::aio_create_completion((void *)paio_data, _get_obj_aio_completion_cb, NULL);
+    librados::AioCompletion *c = librados::Rados::aio_create_completion((void *)paio_data, NULL, _get_obj_aio_completion_cb);
     completion_map[ofs] = c;
 
     *pc = c;
@@ -9294,7 +9294,7 @@ struct get_obj_data : public RefCountedObject {
 
     for (; aiter != completion_map.end(); ++aiter) {
       completion = aiter->second;
-      if (!completion->is_complete()) {
+      if (!completion->is_safe()) {
         /* reached a request that is not yet complete, stop */
         break;
       }