]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: librados aio wait_for_safe, not wait_for_complete
authorSage Weil <sage@redhat.com>
Mon, 26 Sep 2016 15:19:50 +0000 (11:19 -0400)
committerAlexey Sheplyakov <asheplyakov@mirantis.com>
Thu, 2 Feb 2017 05:37:03 +0000 (09:37 +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>
(cherry picked from commit 2e447eafb34a7019ca15189d73a3ad3341640dc5)

src/rgw/rgw_bucket.cc
src/rgw/rgw_coroutine.cc
src/rgw/rgw_metadata.cc
src/rgw/rgw_rados.cc

index b3e5e0ec42dbedf7afa491db63e16074d8174058..6817da1c9d58d64a48f641c2c3e52ba1ee4856f8 100644 (file)
@@ -596,7 +596,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 87513441e37ac60b4d12dd9126b9fb387d951b5b..b93fe8284a06e8bc8cc45c6a946fbff936ec0a97 100644 (file)
@@ -369,7 +369,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 c4c352a382d25231df3ff3d22b606c2537d942ac..154cab95403688a549008a65d57b3e26ecfce944 100644 (file)
@@ -191,7 +191,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 e288ee539cf8dc7ad912e93fc7283dcd4b11b965..16801e1c5ce939c93440dcdf7bb14169e8f40fa2 100644 (file)
@@ -6461,7 +6461,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;
@@ -6470,7 +6470,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
@@ -8285,7 +8285,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();
 
@@ -9225,7 +9225,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();
@@ -9261,7 +9261,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;
@@ -9323,7 +9323,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;
       }