You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by en...@apache.org on 2017/08/11 19:23:53 UTC

hbase git commit: HBASE-18565 [C++] Fix deadlock in AsyncScanRetryingCaller and other RPCs

Repository: hbase
Updated Branches:
  refs/heads/HBASE-14850 e5643e863 -> e2a1cad3e


HBASE-18565 [C++] Fix deadlock in AsyncScanRetryingCaller and other RPCs


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/e2a1cad3
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/e2a1cad3
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/e2a1cad3

Branch: refs/heads/HBASE-14850
Commit: e2a1cad3e3b8e75c3569eda07d20c18155549009
Parents: e5643e8
Author: Enis Soztutar <en...@apache.org>
Authored: Fri Aug 11 12:23:43 2017 -0700
Committer: Enis Soztutar <en...@apache.org>
Committed: Fri Aug 11 12:23:43 2017 -0700

----------------------------------------------------------------------
 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(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/e2a1cad3/hbase-native-client/core/async-rpc-retrying-caller.cc
----------------------------------------------------------------------
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)));
   });
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/e2a1cad3/hbase-native-client/core/async-scan-rpc-retrying-caller.cc
----------------------------------------------------------------------
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());