You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Ankit Singhal (JIRA)" <ji...@apache.org> on 2016/08/10 15:11:20 UTC
[jira] [Created] (HBASE-16389) Thread leak in
CoprocessorHost#getTable(TableName tableName)
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)