[ https://issues.apache.org/jira/browse/HBASE-16389?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ted Yu updated HBASE-16389: --------------------------- Summary: Thread leak in CoprocessorHost#getTable(TableName) API (was: Thread leak in CoprocessorHost#getTable(TableName tableName) API) > Thread leak in CoprocessorHost#getTable(TableName) API > ------------------------------------------------------ > > Key: HBASE-16389 > URL: https://issues.apache.org/jira/browse/HBASE-16389 > Project: HBase > Issue Type: Bug > Reporter: Ankit Singhal > Attachments: HBASE-16389.patch > > > 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)