[ https://issues.apache.org/jira/browse/HBASE-28323?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Zhiwen Deng resolved HBASE-28323. --------------------------------- Resolution: Not A Problem > 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)