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

Viraj Jasani commented on HBASE-28741:
--------------------------------------

 
{code:java}
protected AbstractRpcBasedConnectionRegistry(Configuration conf,
  String hedgedReqsFanoutConfigName, String initialRefreshDelaySecsConfigName,
  String refreshIntervalSecsConfigName, String minRefreshIntervalSecsConfigName)
  throws IOException {
  this.hedgedReadFanOut =
    Math.max(1, conf.getInt(hedgedReqsFanoutConfigName, 
HEDGED_REQS_FANOUT_DEFAULT));
  rpcTimeoutMs = (int) Math.min(Integer.MAX_VALUE,
    conf.getLong(HConstants.HBASE_RPC_TIMEOUT_KEY, 
HConstants.DEFAULT_HBASE_RPC_TIMEOUT));
  // XXX: we pass cluster id as null here since we do not have a cluster id 
yet, we have to fetch
  // this through the master registry...
  // This is a problem as we will use the cluster id to determine the 
authentication method
  rpcClient = RpcClientFactory.createClient(conf, null);
  rpcControllerFactory = RpcControllerFactory.instantiate(conf);
  populateStubs(getBootstrapNodes(conf));
  // could return null here is refresh interval is less than zero
  registryEndpointRefresher =
    RegistryEndpointsRefresher.create(conf, initialRefreshDelaySecsConfigName,
      refreshIntervalSecsConfigName, minRefreshIntervalSecsConfigName, 
this::refreshStubs);
}{code}
 

 

[~zhangduo] [~apurtell] For RpcConnectionRegistry based timeout, we need to set 
different Rpc timeout value above. One of the proposals is to change config 
above for:
{code:java}
rpcTimeoutMs = (int) Math.min(Integer.MAX_VALUE, 
conf.getLong(HConstants.HBASE_RPC_TIMEOUT_KEY, 
HConstants.DEFAULT_HBASE_RPC_TIMEOUT));  {code}
My question is, is it considered incompatible if we introduce new config for 
rpcTimeout here? e.g. "hbase.rpc.connection.registry.timeout". We do want much 
smaller timeout for metadata registry APIs than any other Rpc timeouts.

One way to look at this is, connection registry implementations are 
IA.LimitedPrivate so maybe config level incompatibility is fine? WDYT?

> Rpc ConnectionRegistry APIs should have timeout
> -----------------------------------------------
>
>                 Key: HBASE-28741
>                 URL: https://issues.apache.org/jira/browse/HBASE-28741
>             Project: HBase
>          Issue Type: Improvement
>    Affects Versions: 2.6.0, 2.4.18, 2.5.10
>            Reporter: Viraj Jasani
>            Priority: Major
>
> ConnectionRegistry are some of the most basic metadata APIs that determine 
> how clients can interact with the servers after getting required metadata. 
> These APIs should timeout quickly if they cannot serve metadata in time.
> Similar to HBASE-28428 introducing timeout for Zookeeper ConnectionRegistry 
> APIs, we should also introduce timeout (same timeout values) for Rpc 
> ConnectionRegistry APIs as well. RpcConnectionRegistry uses HBase RPC 
> framework with hedge read fanout mode.
> We have two options to introduce timeout:
>  # Use RetryTimer to keep watch on CompletableFuture and make it complete 
> exceptionally if timeout is reached (similar proposal as HBASE-28428).
>  # Introduce separate Rpc timeout config for 
> AbstractRpcBasedConnectionRegistry as the rpc timeout for generic RPC 
> operations (hbase.rpc.timeout) could be higher.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to