[
https://issues.apache.org/jira/browse/HBASE-10396?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chia-Ping Tsai resolved HBASE-10396.
------------------------------------
Resolution: Won't Fix
0.94 is EOL. Reopen it if objection on mailing list.
> The constructor of HBaseAdmin may close the shared HConnection
> ---------------------------------------------------------------
>
> Key: HBASE-10396
> URL: https://issues.apache.org/jira/browse/HBASE-10396
> Project: HBase
> Issue Type: Bug
> Components: Admin, Client
> Affects Versions: 0.94.16
> Reporter: Jianwei Cui
> Attachments: HBASE-10396-0.94-v1.patch, HBASE-10396-0.94-v2.patch
>
>
> HBaseAdmin has the constructor:
> {code}
> public HBaseAdmin(Configuration c)
> throws MasterNotRunningException, ZooKeeperConnectionException {
> this.conf = HBaseConfiguration.create(c);
> this.connection = HConnectionManager.getConnection(this.conf);
> ...
> {code}
> As shown in above code, HBaseAdmin will get a cached HConnection or create a
> new HConnection and use this HConnection to connect to Master. Then,
> HBaseAdmin will delete the HConnection when connecting to master fail as
> follows:
> {code}
> while ( true ){
> try {
> this.connection.getMaster();
> return;
> } catch (MasterNotRunningException mnre) {
> HConnectionManager.deleteStaleConnection(this.connection);
> this.connection = HConnectionManager.getConnection(this.conf);
> }
> {code}
> The above code will invoke HConnectionManager#deleteStaleConnection to delete
> the HConnection from global HConnection cache. The risk is that the deleted
> HConnection might be sharing by other threads, such as HTable or HTablePool.
> Then, these threads which sharing the deleted HConnection will get closed
> HConnection exception:
> {code}
> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@61bc59aa
> closed
> {code}
> If users use HTablePool, the situation will become worse because closing
> HTable will only return HTable to HTablePool which won't reduce the reference
> count of the closed HConnection. Then, the closed HConnection will always be
> used before clearing HTablePool. In 0.94, some modules such as Rest server
> are using HTablePool, therefore may suffer from this problem.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)