[ https://issues.apache.org/jira/browse/HBASE-10396?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13878481#comment-13878481 ]
cuijianwei commented on HBASE-10396: ------------------------------------ Thanks for your comment [~zjushch], I go through the code of HBaseAdmin in trunk. The HConnection will be closed in HBaseAdmin#close so that fixed the problem. The code of HBaseAdmin changed a lot between 0.94 and trunk, will we supply a patch for 0.94 to fix this problem? > 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: cuijianwei > > 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.1.5#6160)