if doSyncForSuspendedConnection repeatedly fails there may be an infinite loop 
of connection resets. So, after the first reset (signaled by getInstanceIndex 
value changing) give up and mark the connection LOST


Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/c40afd96
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/c40afd96
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/c40afd96

Branch: refs/heads/master
Commit: c40afd96a0121ac45b340679174320f7b4f02d26
Parents: f0fc51f
Author: randgalt <randg...@apache.org>
Authored: Mon Feb 3 13:46:28 2014 -0500
Committer: randgalt <randg...@apache.org>
Committed: Mon Feb 3 13:46:28 2014 -0500

----------------------------------------------------------------------
 .../org/apache/curator/framework/imps/CuratorFrameworkImpl.java | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/c40afd96/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
----------------------------------------------------------------------
diff --git 
a/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
 
b/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
index 3a2a48f..b480d9b 100644
--- 
a/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
+++ 
b/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
@@ -624,14 +624,15 @@ public class CuratorFrameworkImpl implements 
CuratorFramework
                 // if instanceIndex != newInstanceIndex, the ZooKeeper 
instance was reset/reallocated
                 // so the pending background sync is no longer valid
                 long newInstanceIndex = client.getInstanceIndex();
-                if ( instanceIndex == newInstanceIndex )
+                if ( (instanceIndex < 0) || (instanceIndex == 
newInstanceIndex) )
                 {
                     
connectionStateManager.addStateChange(ConnectionState.LOST);
                 }
                 else
                 {
                     log.debug("suspendConnection() failure ignored as the 
ZooKeeper instance was reset. Retrying.");
-                    doSyncForSuspendedConnection(newInstanceIndex);
+                    // send -1 to signal that if it happens again, punt and 
mark the connection lost
+                    doSyncForSuspendedConnection(-1);
                 }
             }
         };

Reply via email to