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:12:20 UTC
[jira] [Updated] (HBASE-16389) Thread leak in
CoprocessorHost#getTable(TableName tableName) API
[ https://issues.apache.org/jira/browse/HBASE-16389?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ankit Singhal updated HBASE-16389:
----------------------------------
Summary: Thread leak in CoprocessorHost#getTable(TableName tableName) API (was: Thread leak in CoprocessorHost#getTable(TableName tableName))
> Thread leak in CoprocessorHost#getTable(TableName tableName) API
> ----------------------------------------------------------------
>
> 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)