hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "jiraposter@reviews.apache.org (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-2937) Facilitate Timeouts In HBase Client
Date Wed, 18 May 2011 23:58:48 GMT

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

jiraposter@reviews.apache.org commented on HBASE-2937:

This is an automatically generated e-mail. To reply, visit:

Review request for hbase.


Thanks to HBASE-3154, users now have the ability to specify a timeout for client-side RPC
calls. However, it doesn't go far enough in terms of how low that timeout can go. Set the
RPC timeout to too low a value and you run the risk of timing out on calls to the meta tables,
which are preconditions to calling the {{HRegionInterface}} proxy.

Given that, I believe the motivation at work in HBASE-2937 still hold true. In this patch,
I add a operation-level timeout, configurable through "hbase.client.operation.timeout", which
will override the value specified by "hbase.rpc.timeout", if any, within the scope of the
{{ServerCallable#call}} method. In other words, the operation-level timeout does not apply
to calls to the meta tables. 

Furthermore, the patch treats an RPC timeout as a non-fatal event, in that it will not cause
the {{HBaseClient#Connection}} instance to be closed. Last but not the least, users will also
have the ability to set the operation timeout on the {{HTable}} on the fly.

This addresses bug HBASE-2937.


  src/main/java/org/apache/hadoop/hbase/HConstants.java e9e3694 
  src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java b26f41e 
  src/main/java/org/apache/hadoop/hbase/client/HTable.java 61e151a 
  src/main/java/org/apache/hadoop/hbase/client/ServerCallable.java 6f22123 
  src/main/java/org/apache/hadoop/hbase/ipc/HBaseClient.java 470e741 
  src/main/java/org/apache/hadoop/hbase/ipc/HBaseRPC.java dbb57d9 
  src/main/java/org/apache/hadoop/hbase/util/PoolMap.java 354d49a 

Diff: https://reviews.apache.org/r/755/diff


mvn test



> Facilitate Timeouts In HBase Client
> -----------------------------------
>                 Key: HBASE-2937
>                 URL: https://issues.apache.org/jira/browse/HBASE-2937
>             Project: HBase
>          Issue Type: New Feature
>          Components: client
>    Affects Versions: 0.89.20100621
>            Reporter: Karthick Sankarachary
>            Assignee: Karthick Sankarachary
>            Priority: Critical
>             Fix For: 0.92.0
>         Attachments: HBASE-2937.patch, HBASE-2937.patch
> Currently, there is no way to force an operation on the HBase client (viz. HTable) to
time out if a certain amount of time has elapsed.  In other words, all invocations on the
HTable class are veritable blocking calls, which will not return until a response (successful
or otherwise) is received. 
> In general, there are two ways to handle timeouts:  (a) call the operation in a separate
thread, until it returns a response or the wait on the thread times out and (b) have the underlying
socket unblock the operation if the read times out.  The downside of the former approach is
that it consumes more resources in terms of threads and callables. 
> Here, we describe a way to specify and handle timeouts on the HTable client, which relies
on the latter approach (i.e., socket timeouts). Right now, the HBaseClient sets the socket
timeout to the value of the "ipc.ping.interval" parameter, which is also how long it waits
before pinging the server in case of a failure. The goal is to allow clients to set that timeout
on the fly through HTable. Rather than adding an optional timeout argument to every HTable
operation, we chose to make it a property of HTable which effectively applies to every method
that involves a remote operation.
> In order to propagate the timeout  from HTable to HBaseClient, we replaced all occurrences
of ServerCallable in HTable with an extension called ClientCallable, which sets the timeout
on the region server interface, once it has been instantiated, through the HConnection object.
The latter, in turn, asks HBaseRPC to pass that timeout to the corresponding Invoker, so that
it may inject the timeout at the time the invocation is made on the region server proxy. Right
before the request is sent to the server, we set the timeout specified by the client on the
underlying socket.
> In conclusion, this patch will afford clients the option of performing an HBase operation
until it completes or a specified timeout elapses. Note that a timeout of zero is interpreted
as an infinite timeout.

This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

View raw message