From 01f304009a77c70ec6af988b39e115615bb29a08 Mon Sep 17 00:00:00 2001 From: james Date: Fri, 4 Sep 2020 10:05:13 +0100 Subject: [PATCH 1/2] Auto-forwarding now waits for a result when using blocking mode before returning --- include/libnuraft/async.hxx | 10 ++++++++++ src/handle_user_cmd.cxx | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/include/libnuraft/async.hxx b/include/libnuraft/async.hxx index 07e35c14..ef0d87ec 100644 --- a/include/libnuraft/async.hxx +++ b/include/libnuraft/async.hxx @@ -268,6 +268,16 @@ public: return empty_result_; } + /** + * Blocks until set_result is called. + * + * @return void. + */ + void wait() { + std::unique_lock lock(lock_); + cv_.wait(lock); + } + private: T empty_result_; T result_; diff --git a/src/handle_user_cmd.cxx b/src/handle_user_cmd.cxx index 1cf707b1..93f0b4a0 100644 --- a/src/handle_user_cmd.cxx +++ b/src/handle_user_cmd.cxx @@ -186,6 +186,12 @@ ptr< cmd_result< ptr > > raft_server::send_msg_to_leader(ptr& r presult->set_result(resp_ctx, perr); }; rpc_cli->send(req, handler); + + ptr params = ctx_->get_params(); + if (params->return_method_ == raft_params::blocking) { + presult->wait(); + } + return presult; // LCOV_EXCL_STOP } From bf91c5bbf31933ba3b41140726c8274f47e9d021 Mon Sep 17 00:00:00 2001 From: james Date: Tue, 8 Sep 2020 12:09:22 +0100 Subject: [PATCH 2/2] Removed unnecessary wait function and swapped out with get --- include/libnuraft/async.hxx | 10 ---------- src/handle_user_cmd.cxx | 2 +- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/include/libnuraft/async.hxx b/include/libnuraft/async.hxx index ef0d87ec..07e35c14 100644 --- a/include/libnuraft/async.hxx +++ b/include/libnuraft/async.hxx @@ -268,16 +268,6 @@ public: return empty_result_; } - /** - * Blocks until set_result is called. - * - * @return void. - */ - void wait() { - std::unique_lock lock(lock_); - cv_.wait(lock); - } - private: T empty_result_; T result_; diff --git a/src/handle_user_cmd.cxx b/src/handle_user_cmd.cxx index 93f0b4a0..4e1d1cc6 100644 --- a/src/handle_user_cmd.cxx +++ b/src/handle_user_cmd.cxx @@ -189,7 +189,7 @@ ptr< cmd_result< ptr > > raft_server::send_msg_to_leader(ptr& r ptr params = ctx_->get_params(); if (params->return_method_ == raft_params::blocking) { - presult->wait(); + presult->get(); } return presult;