[
https://issues.apache.org/jira/browse/HBASE-4773?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13157024#comment-13157024
]
xufeng commented on HBASE-4773:
-------------------------------
yes, I have tested it in my cluster.
Here is my client test code:
{noformat}
.....
static void initHBase() throws ZooKeeperConnectionException
{
HBaseAdmin hbaseAdmin = null;
Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum",
"158.1.130.31,158.1.130.32,158.1.130.33");
config.set("hbase.zookeeper.property.clientPort", "2181");
try {
hbaseAdmin = new HBaseAdmin(config);
System.out.println("init sucess!");
} catch (MasterNotRunningException e) {
e.printStackTrace();
initHBase();
} catch (ZooKeeperConnectionException e) {
e.printStackTrace();
initHBase();
}
}
}
.....
{noformat}
In my cluster I did not start HBase process.
Run test,result of the lsof commondline is:
{noformat}
java 16735 root 72w REG 253,3 890569
524379 /opt/xf/hadoop.log
java 16735 root 73w REG 253,3 274338
524376 /opt/xf/HA_hadoop.log
java 16735 root 74r FIFO 0,8 0t0
110645029 pipe
java 16735 root 75w FIFO 0,8 0t0
110645029 pipe
java 16735 root 76u 0000 0,9 0
21 anon_inode
java 16735 root 77u IPv6 110645030 0t0
TCP C3S31:35186->C3S33:eforward (ESTABLISHED)
java 16735 root 78u unix 0xffff8800cba90380 0t0
110645035 socket
java 16735 root 79u sock 0,6 0t0
110645032 can't identify protocol
java 16735 root 80r FIFO 0,8 0t0
110645037 pipe
java 16735 root 81w FIFO 0,8 0t0
110645037 pipe
java 16735 root 82u 0000 0,9 0
21 anon_inode
java 16735 root 83u IPv6 110645038 0t0
TCP C3S31:53727->C3S31:eforward (ESTABLISHED)
java 16735 root 84r FIFO 0,8 0t0
110645043 pipe
java 16735 root 85w FIFO 0,8 0t0
110645043 pipe
java 16735 root 86u 0000 0,9 0
21 anon_inode
java 16735 root 87u IPv6 110645044 0t0
TCP C3S31:53728->C3S31:eforward (ESTABLISHED)
java 16735 root 88r FIFO 0,8 0t0
110645047 pipe
java 16735 root 89w FIFO 0,8 0t0
110645047 pipe
java 16735 root 90u 0000 0,9 0
21 anon_inode
java 16735 root 91u IPv6 110645048 0t0
TCP C3S31:47183->C3S32:eforward (ESTABLISHED)
java 16735 root 92r FIFO 0,8 0t0
110645050 pipe
java 16735 root 93w FIFO 0,8 0t0
110645050 pipe
java 16735 root 94u 0000 0,9 0
21 anon_inode
java 16735 root 95u IPv6 110645051 0t0
TCP C3S31:53730->C3S31:eforward (ESTABLISHED)
java 16735 root 96r FIFO 0,8 0t0
110645135 pipe
java 16735 root 97w FIFO 0,8 0t0
110645135 pipe
java 16735 root 98u 0000 0,9 0
21 anon_inode
java 16735 root 99u IPv6 110645136 0t0
TCP C3S31:49799->C3S31:eforward (ESTABLISHED)
java 16735 root 100r FIFO 0,8 0t0
110645143 pipe
java 16735 root 101w FIFO 0,8 0t0
110645143 pipe
java 16735 root 102u 0000 0,9 0
21 anon_inode
java 16735 root 103u IPv6 110645144 0t0
TCP C3S31:38931->C3S32:eforward (ESTABLISHED)
java 16735 root 104r FIFO 0,8 0t0
110645148 pipe
java 16735 root 105w FIFO 0,8 0t0
110645148 pipe
java 16735 root 106u 0000 0,9 0
21 anon_inode
java 16735 root 107u IPv6 110645149 0t0
TCP C3S31:59939->C3S33:eforward (ESTABLISHED)
java 16735 root 108r FIFO 0,8 0t0
110645507 pipe
java 16735 root 109w FIFO 0,8 0t0
110645507 pipe
java 16735 root 110u 0000 0,9 0
21 anon_inode
java 16735 root 111u IPv6 110645508 0t0
TCP C3S31:59940->C3S33:eforward (ESTABLISHED)
{noformat}
The [eforward] is port of zookeeper.
It made the connection leak because did not delete connection between client
and zookeeper when MasterNotRunningException happened.
And I also tested my patch,the result of it is :
{noformat}
java 16652 root 71r REG 253,3 936397
524302 /opt/xf/lib/guava-r06.jar
java 16652 root 72w REG 253,3 786418
524379 /opt/xf/hadoop.log
java 16652 root 73w REG 253,3 262352
524376 /opt/xf/HA_hadoop.log
java 16652 root 74r FIFO 0,8 0t0
110644817 pipe
java 16652 root 75w FIFO 0,8 0t0
110644817 pipe
java 16652 root 76u 0000 0,9 0
21 anon_inode
java 16652 root 77u IPv6 110644818 0t0
TCP C3S31:53993->C3S33:eforward (ESTABLISHED)
java 16652 root 78u unix 0xffff8800cbb1d9c0 0t0
110644491 socket
java 16652 root 79u sock 0,6 0t0
110644488 can't identify protocol
{noformat}
> HBaseAdmin leaks ZooKeeper connections
> --------------------------------------
>
> Key: HBASE-4773
> URL: https://issues.apache.org/jira/browse/HBASE-4773
> Project: HBase
> Issue Type: Bug
> Components: client
> Affects Versions: 0.90.4
> Reporter: gaojinchao
> Priority: Critical
> Fix For: 0.90.5
>
> Attachments: 4773.patch
>
>
> When master crashs, HBaseAdmin will leaks ZooKeeper connections
> I think we should close the zk connetion when throw MasterNotRunningException
> public HBaseAdmin(Configuration c)
> throws MasterNotRunningException, ZooKeeperConnectionException {
> this.conf = HBaseConfiguration.create(c);
> this.connection = HConnectionManager.getConnection(this.conf);
> this.pause = this.conf.getLong("hbase.client.pause", 1000);
> this.numRetries = this.conf.getInt("hbase.client.retries.number", 10);
> this.retryLongerMultiplier =
> this.conf.getInt("hbase.client.retries.longer.multiplier", 10);
> //we should add this code and close the zk connection
> try{
> this.connection.getMaster();
> }catch(MasterNotRunningException e){
> HConnectionManager.deleteConnection(conf, false);
> throw e;
> }
> }
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira