You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Xiaobing Zhou (JIRA)" <ji...@apache.org> on 2017/02/03 23:54:51 UTC

[jira] [Commented] (HBASE-17465) [C++] implement request retry mechanism over RPC

    [ https://issues.apache.org/jira/browse/HBASE-17465?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15852356#comment-15852356 ] 

Xiaobing Zhou commented on HBASE-17465:
---------------------------------------

posted v7.
# added unit tests
# simplified generic parameters.
# implemented a bunch of mockup class, .e.g. MockRawAsyncTableImpl, which can be used as a base for RawAsyncTableImpl implementation.

Still need to refine tests by completing mockup functions, e.g. MockAsyncConnection::GetRegionServerStub, also need to add various configuration setting to hit retry implementation for verification.

Usage example in tests:
{code}
/* create hbase client connection */
  auto conn = std::make_shared<MockAsyncConnection>();

  /* create retry caller factory */
  auto tableImpl = std::make_shared<MockRawAsyncTableImpl<MockAsyncConnection>>(conn);
  AsyncRpcRetryingCallerFactory<MockAsyncConnection> caller_factory(conn);

  /* create request caller builder */
  auto p = caller_factory.Single<hbase::Result>();

  /* call with retry to get result */
  hbase::Result result =
    p->table(std::make_shared<TableName>(tn))
     ->row(row)
     ->rpc_timeout(conn->get_conn_conf()->GetReadRpcTimeoutNs())
     ->operation_timeout(conn->get_conn_conf()->GetOperationTimeoutNs())
     ->action(
        [=, &get](auto& controller, auto& loc, auto& stub) -> folly::Future<hbase::Result> {
          return tableImpl->GetCall(stub, controller, loc, get);})
     ->Build()->Call().get();

  /* verify result */
  ASSERT_TRUE(!result->IsEmpty()) << "Result shouldn't be empty.";
  EXPECT_EQ("test2", result->Row());
  EXPECT_EQ("value2", *(result->Value("d", "2")));
  EXPECT_EQ("value for extra", *(result->Value("d", "extra")));

  /* clean */
  delete test_util;
{code}

> [C++] implement request retry mechanism over RPC
> ------------------------------------------------
>
>                 Key: HBASE-17465
>                 URL: https://issues.apache.org/jira/browse/HBASE-17465
>             Project: HBase
>          Issue Type: Sub-task
>            Reporter: Xiaobing Zhou
>            Assignee: Xiaobing Zhou
>         Attachments: HBASE-17465-HBASE-14850.000.patch, HBASE-17465-HBASE-14850.001.patch, HBASE-17465-HBASE-14850.002.patch, HBASE-17465-HBASE-14850.003.patch, HBASE-17465-HBASE-14850.004.patch, HBASE-17465-HBASE-14850.005.patch, HBASE-17465-HBASE-14850.006.patch, HBASE-17465-HBASE-14850.007.patch
>
>
> HBASE-17051 implemented RPC layer. Requests retries will make system reliable. This JIRA proposes adding it, which corresponds to similar implementation in  SingleRequestCallerBuilder (or BatchCallerBuilder, ScanSingleRegionCallerBuilder, SmallScanCallerBuilder, etc.) and AsyncSingleRequestRpcRetryingCaller. As a bonus, retry should be more generic, decoupled with HRegionLocation.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)