[
https://issues.apache.org/jira/browse/HBASE-28323?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Zhiwen Deng updated HBASE-28323:
--------------------------------
Component/s: Client
> When AbstractRpcClient calls getConnection, the status of conn should be
> checked
> --------------------------------------------------------------------------------
>
> Key: HBASE-28323
> URL: https://issues.apache.org/jira/browse/HBASE-28323
> Project: HBase
> Issue Type: Bug
> Components: Client
> Affects Versions: 2.5.7
> Reporter: Zhiwen Deng
> Priority: Major
>
> h3. 1. Question
> The connection will only be created when it does not exist. Since the conn in
> *connections* are cleaned asynchronously and regularly, it is very likely
> that we will get a closed connection.
> {code:java}
> /**
> * Get a connection from the pool, or create a new one and add it to the
> pool. Connections to a
> * given host/port are reused.
> */
> private T getConnection(ConnectionId remoteId) throws IOException {
> if (failedServers.isFailedServer(remoteId.getAddress())) {
> if (LOG.isDebugEnabled()) {
> LOG.debug("Not trying to connect to " + remoteId.getAddress()
> + " this server is in the failed servers list");
> }
> throw new FailedServerException(
> "This server is in the failed servers list: " + remoteId.getAddress());
> }
> T conn;
> synchronized (connections) {
> if (!running) {
> throw new StoppedRpcClientException();
> }
> conn = connections.getOrCreate(remoteId, () ->
> createConnection(remoteId));
> conn.setLastTouched(EnvironmentEdgeManager.currentTime());
> }
> return conn;
> } {code}
> h3. 2. Solution
> *
> When getConnection, we should to check whether the conn is active
> * Optimize the impl of isActive and increase the judgment of channel status
> {code:java}
> @Override
> public boolean isActive() {
> return channel != null && channel.isActive();
> } {code}
> I am new to HBase, so my understanding may be wrong. Please correct me.
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)