You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2019/03/12 12:46:42 UTC

[hbase] 114/133: HBASE-18565 [C++] Fix deadlock in AsyncScanRetryingCaller and other RPCs

This is an automated email from the ASF dual-hosted git repository.

zghao pushed a commit to branch HBASE-14850
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit bbdac8ebeff0e704e9d0c788dad7ba87a071bf53
Author: Enis Soztutar <en...@apache.org>
AuthorDate: Fri Aug 11 12:23:43 2017 -0700

    HBASE-18565 [C++] Fix deadlock in AsyncScanRetryingCaller and other RPCs
---
 hbase-native-client/core/async-rpc-retrying-caller.cc      | 4 ++--
 hbase-native-client/core/async-scan-rpc-retrying-caller.cc | 1 +
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/hbase-native-client/core/async-rpc-retrying-caller.cc b/hbase-native-client/core/async-rpc-retrying-caller.cc
index cb058b1..8e60991 100644
--- a/hbase-native-client/core/async-rpc-retrying-caller.cc
+++ b/hbase-native-client/core/async-rpc-retrying-caller.cc
@@ -148,9 +148,9 @@ void AsyncSingleRequestRpcRetryingCaller<RESP>::OnError(
    * establishment time (see ConnectionFactory::Connect()), otherwise, the IOThreadPool thread
    * just hangs because it deadlocks itself.
    */
-  conn_->retry_executor()->add([&]() {
+  conn_->retry_executor()->add([=]() {
     retry_timer_->scheduleTimeoutFn(
-        [this]() { conn_->cpu_executor()->add([&]() { LocateThenCall(); }); },
+        [=]() { conn_->cpu_executor()->add([&]() { LocateThenCall(); }); },
         std::chrono::milliseconds(TimeUtil::ToMillis(delay_ns)));
   });
 }
diff --git a/hbase-native-client/core/async-scan-rpc-retrying-caller.cc b/hbase-native-client/core/async-scan-rpc-retrying-caller.cc
index fbdf17a..a1e8362 100644
--- a/hbase-native-client/core/async-scan-rpc-retrying-caller.cc
+++ b/hbase-native-client/core/async-scan-rpc-retrying-caller.cc
@@ -406,6 +406,7 @@ void AsyncScanRpcRetryingCaller::Call() {
       ->AsyncCall(region_location_->server_name().host_name(),
                   region_location_->server_name().port(), std::move(req),
                   security::User::defaultUser(), "ClientService")
+      .via(conn_->cpu_executor().get())
       .then([self, this](const std::unique_ptr<Response>& resp) {
         auto scan_resp = std::static_pointer_cast<pb::ScanResponse>(resp->resp_msg());
         return OnComplete(controller_, scan_resp, resp->cell_scanner());