From: Sage Weil Date: Mon, 26 Sep 2016 15:19:50 +0000 (-0400) Subject: rgw: librados aio wait_for_safe, not wait_for_complete X-Git-Tag: v10.2.6~23^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e5646a0192c1968a542b42dbfe907565b604971e;p=ceph.git rgw: librados aio wait_for_safe, not wait_for_complete 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 (cherry picked from commit 2e447eafb34a7019ca15189d73a3ad3341640dc5) --- diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index b3e5e0ec42db..6817da1c9d58 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -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; diff --git a/src/rgw/rgw_coroutine.cc b/src/rgw/rgw_coroutine.cc index 87513441e37a..b93fe8284a06 100644 --- a/src/rgw/rgw_coroutine.cc +++ b/src/rgw/rgw_coroutine.cc @@ -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() diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc index c4c352a382d2..154cab954036 100644 --- a/src/rgw/rgw_metadata.cc +++ b/src/rgw/rgw_metadata.cc @@ -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() { diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index e288ee539cf8..16801e1c5ce9 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -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; }