Andrew Purtell created HBASE-15866:
--------------------------------------

             Summary: Split hbase.rpc.timeout into *.read.timeout and 
*.write.timeout
                 Key: HBASE-15866
                 URL: https://issues.apache.org/jira/browse/HBASE-15866
             Project: HBase
          Issue Type: Bug
            Reporter: Andrew Purtell
             Fix For: 2.0.0


We have a single tunable for the RPC timeout interval - hbase.rpc.timeout. This 
is fine for the general case but there are use cases where it would be 
advantageous to set two separate timeouts for reads (gets, scans, perhaps with 
significant server side filtering - although the new scanner heartbeat feature 
mitigates where available) and mutations (fail fast under tight SLA, resubmit 
or take mitigating action). 

I propose we refer to a configuration setting "hbase.rpc.read.timeout" when 
handling read operations and "hbase.rpc.write.timeout" when handling write 
operations. If those values are not set in the configuration, fall back to the 
value of "hbase.rpc.timeout" or its default. 

So for example in HTable instead of one global timeout for each RPC 
(rpcTimeout), there would be a readRpcTimeout and writeRpcTimeout also set up 
in HTable#finishSetup. Then wherever we set up RPC with 
RpcRetryingCallerFactory#newCaller(int rpcTimeout) we pass in the read or write 
timeout depending on what the op is.

In general I don't like the idea of adding configuration parameters to our 
already heavyweight set, but I think the inability to control timeouts 
separately for reads and writes is an operational deficit.

See also PHOENIX-2916.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to