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: v11.1.0~599^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2e447eafb34a7019ca15189d73a3ad3341640dc5;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 --- diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index df420ccb731b..f19ec7fc894c 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -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; diff --git a/src/rgw/rgw_coroutine.cc b/src/rgw/rgw_coroutine.cc index cf9111b0fa05..7cebd27e5587 100644 --- a/src/rgw/rgw_coroutine.cc +++ b/src/rgw/rgw_coroutine.cc @@ -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() diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc index 23805647cd72..f196fcaa800e 100644 --- a/src/rgw/rgw_metadata.cc +++ b/src/rgw/rgw_metadata.cc @@ -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() { diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 9bbc4628c666..0933702143c9 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -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; }