[
https://issues.apache.org/jira/browse/HBASE-2937?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13037079#comment-13037079
]
[email protected] commented on HBASE-2937:
------------------------------------------------------
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/755/
-----------------------------------------------------------
(Updated 2011-05-20 20:49:57.345063)
Review request for hbase.
Changes
-------
Retry {{ServerCallable#call}} in the case of non-{{SocketTimeoutException}}s,
but only if we spent less time than the operation timeout.
Summary
-------
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.
https://issues.apache.org/jira/browse/HBASE-2937
Diffs (updated)
-----
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
Testing
-------
mvn test
Thanks,
Karthick
> 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