Index: src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java (revision 1090461) +++ src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java (working copy) @@ -144,7 +144,22 @@ } } while (isFinishedRetryingRecoverable(finished)); // Convert connectionloss exception to ZKCE. - if (ke != null) throw new ZooKeeperConnectionException(ke); + if (ke != null) { + try { + // If we don't close it, the zk connection managers won't be killed + this.zooKeeper.close(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + LOG.warn("Interrupted while closing", e); + } + throw new ZooKeeperConnectionException("HBase is able to connect to" + + " ZooKeeper but the connection closes immediately. This could be" + + " a sign that the server has too many connections (30 is the" + + " default). Consider inspecting your ZK server logs for that" + + " error and then make sure you are reusing HBaseConfiguration" + + " as often as you can. See HTable's javadoc for more information.", + ke); + } ZKUtil.createAndFailSilent(this, assignmentZNode); ZKUtil.createAndFailSilent(this, rsZNode); ZKUtil.createAndFailSilent(this, tableZNode); Index: src/main/java/org/apache/hadoop/hbase/ZooKeeperConnectionException.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/ZooKeeperConnectionException.java (revision 1090461) +++ src/main/java/org/apache/hadoop/hbase/ZooKeeperConnectionException.java (working copy) @@ -43,7 +43,7 @@ * Constructor taking another exception. * @param e Exception to grab data from. */ - public ZooKeeperConnectionException(Exception e) { - super(e); + public ZooKeeperConnectionException(String message, Exception e) { + super(message, e); } } Index: src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (revision 1090461) +++ src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (working copy) @@ -996,8 +996,11 @@ if(zooKeeper == null) { try { this.zooKeeper = new ZooKeeperWatcher(conf, "hconnection", this); + } catch(ZooKeeperConnectionException zce) { + throw zce; } catch (IOException e) { - throw new ZooKeeperConnectionException(e); + throw new ZooKeeperConnectionException("An error is preventing" + + " HBase from connecting to ZooKeeper", e); } } return zooKeeper;