Josh Elser created HBASE-13480:
----------------------------------
Summary: ShortCircuitConnection doesn't short-circuit all calls as
expected
Key: HBASE-13480
URL: https://issues.apache.org/jira/browse/HBASE-13480
Project: HBase
Issue Type: Bug
Components: Client
Affects Versions: 1.0.0, 2.0.0, 1.1.0
Reporter: Josh Elser
Assignee: Josh Elser
Fix For: 2.0.0, 1.1.0, 1.0.2
Noticed the following situation in debugging unexpected unit tests failures in
HBASE-13351.
{{ConnectionUtils#createShortCircuitHConnection(Connection, ServerName,
AdminService.BlockingInterface, ClientService.BlockingInterface)}} is intended
to avoid the extra RPC by calling the server's instantiation of the protobuf
rpc stub directly for the AdminService and ClientService.
The problem is that this is insufficient to actually avoid extra "remote" RPCs
as all other calls to the Connection are routed to a "real" Connection
instance. As such, any object created by the "real" Connection (such as an
HTable) will use the real Connection, not the SSC.
The end result is that
{{MasterRpcService#reportRegionStateTransition(RpcController,
ReportRegionStateTransitionRequest)}} will make additional "remote" RPCs over
what it thinks is an SSC through a {{Get}} on {{HTable}} which was constructed
using the SSC, but the {{Get}} itself will use the underlying real Connection
instead of the SSC. With insufficiently sized thread pools, this has been
observed to result in RPC deadlock in the HMaster where an RPC attempts to make
another RPC but there are no more threads available to service the second RPC
so the first RPC blocks indefinitely.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)