Ankit Singhal created HBASE-16389:
-------------------------------------
Summary: Thread leak in CoprocessorHost#getTable(TableName
tableName)
Key: HBASE-16389
URL: https://issues.apache.org/jira/browse/HBASE-16389
Project: HBase
Issue Type: Bug
Reporter: Ankit Singhal
There is a thread leak in below method, we are creating a default pool while
calling
{code}
@Override
public HTableInterface getTable(TableName tableName) throws IOException {
return this.getTable(tableName,
HTable.getDefaultExecutor(getConfiguration()));
}
{code}
which will never be shutdown because in HTable, we are setting
this.cleanupPoolOnClose to false
{code}
@InterfaceAudience.Private
public HTable(TableName tableName, final ClusterConnection connection,
final TableConfiguration tableConfig,
final RpcRetryingCallerFactory rpcCallerFactory,
final RpcControllerFactory rpcControllerFactory,
final ExecutorService pool) throws IOException {
if (connection == null || connection.isClosed()) {
throw new IllegalArgumentException("Connection is null or closed.");
}
this.tableName = tableName;
this.cleanupConnectionOnClose = false;
this.connection = connection;
this.configuration = connection.getConfiguration();
this.tableConfiguration = tableConfig;
this.pool = pool;
if (pool == null) {
this.pool = getDefaultExecutor(this.configuration);
this.cleanupPoolOnClose = true;
} else {
this.cleanupPoolOnClose = false;
}
{code}
resulted in pool to stay forever ,which eventually can lead other processes or
the same process to starve for a threads.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)