From e3d0d162e00664e70930cf7cea322c4ea3830cc1 Mon Sep 17 00:00:00 2001 From: Benoit Sigoure Date: Fri, 23 Jul 2010 20:50:46 -0700 Subject: [PATCH] HBASE-2849 Have HBase clients recover from ZooKeeper session invalidation The code was only calling resetZooKeeper when the client's session expired. The client session can also be in other states such as disconnected (maybe due to a network failure, or maybe because the whole ZooKeeper ensemble was restarted). Now whenever the client is not in state SyncConnected, it will call resetZooKeeper in order to attempt to create a new ZooKeeper session. --- .../hadoop/hbase/client/HConnectionManager.java | 13 +++++-------- 1 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java b/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java index 9a22464..e9f5c91 100644 --- a/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java +++ b/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java @@ -210,13 +210,10 @@ public class HConnectionManager { * * @param event WatchedEvent witnessed by ZooKeeper. */ - public void process(WatchedEvent event) { - KeeperState state = event.getState(); - if(!state.equals(KeeperState.SyncConnected)) { - LOG.debug("Got ZooKeeper event, state: " + state + ", type: " - + event.getType() + ", path: " + event.getPath()); - } - if (state == KeeperState.Expired) { + public void process(final WatchedEvent event) { + final KeeperState state = event.getState(); + if (!state.equals(KeeperState.SyncConnected)) { + LOG.warn("No longer connected to ZooKeeper, current state: " + state); resetZooKeeper(); } } @@ -227,7 +224,7 @@ public class HConnectionManager { * @throws java.io.IOException if a remote or network exception occurs */ public synchronized ZooKeeperWrapper getZooKeeperWrapper() throws IOException { - if(zooKeeperWrapper == null) { + if (zooKeeperWrapper == null) { zooKeeperWrapper = ZooKeeperWrapper.createInstance(conf, HConnectionManager.class.getName()); zooKeeperWrapper.registerListener(this); -- 1.7.2.rc3.53.ga096a1