Review Board 1.7.22

Failitate Timeouts In HBase Client

Review Request #755 - Created May 18, 2011 and updated

Karthick Sankarachary
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.
mvn test
Review request changed
Updated (May 20, 2011, 8:49 p.m.)
Retry {{ServerCallable#call}} in the case of non-{{SocketTimeoutException}}s, but only if we spent less time than the operation timeout.