You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ca...@apache.org on 2011/09/30 23:59:46 UTC

svn commit: r1177854 - in /zookeeper/branches/branch-3.3: CHANGES.txt src/java/main/org/apache/zookeeper/ClientCnxn.java src/java/main/org/apache/zookeeper/server/DataTree.java

Author: camille
Date: Fri Sep 30 21:59:46 2011
New Revision: 1177854

URL: http://svn.apache.org/viewvc?rev=1177854&view=rev
Log:
ZOOKEEPER-1174. FD leak when network unreachable (Ted Dunning via camille)

Modified:
    zookeeper/branches/branch-3.3/CHANGES.txt
    zookeeper/branches/branch-3.3/src/java/main/org/apache/zookeeper/ClientCnxn.java
    zookeeper/branches/branch-3.3/src/java/main/org/apache/zookeeper/server/DataTree.java

Modified: zookeeper/branches/branch-3.3/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/branches/branch-3.3/CHANGES.txt?rev=1177854&r1=1177853&r2=1177854&view=diff
==============================================================================
--- zookeeper/branches/branch-3.3/CHANGES.txt (original)
+++ zookeeper/branches/branch-3.3/CHANGES.txt Fri Sep 30 21:59:46 2011
@@ -30,6 +30,8 @@ BUGFIXES:
  
   ZOOKEEPER-1206. Sequential node creation does not use always use
   digits in node name given certain Locales. (Mark Miller via phunt)
+  
+  ZOOKEEPER-1174. FD leak when network unreachable. (Ted Dunning via camille)
 
 Release 3.3.3 - 2011-02-23
 Backward compatible changes:

Modified: zookeeper/branches/branch-3.3/src/java/main/org/apache/zookeeper/ClientCnxn.java
URL: http://svn.apache.org/viewvc/zookeeper/branches/branch-3.3/src/java/main/org/apache/zookeeper/ClientCnxn.java?rev=1177854&r1=1177853&r2=1177854&view=diff
==============================================================================
--- zookeeper/branches/branch-3.3/src/java/main/org/apache/zookeeper/ClientCnxn.java (original)
+++ zookeeper/branches/branch-3.3/src/java/main/org/apache/zookeeper/ClientCnxn.java Fri Sep 30 21:59:46 2011
@@ -1066,9 +1066,15 @@ public class ClientCnxn {
             sock.socket().setTcpNoDelay(true);
             setName(getName().replaceAll("\\(.*\\)",
                     "(" + addr.getHostName() + ":" + addr.getPort() + ")"));
-            sockKey = sock.register(selector, SelectionKey.OP_CONNECT);
-            if (sock.connect(addr)) {
-                primeConnection(sockKey);
+            try {
+                sockKey = sock.register(selector, SelectionKey.OP_CONNECT);
+                boolean immediateConnect = sock.connect(addr);
+                if (immediateConnect) {
+                    primeConnection(sockKey);
+                }
+            } catch (IOException e) {
+                LOG.error("Unable to open socket to " + addr);
+                sock.close();
             }
             initialized = false;
 
@@ -1160,7 +1166,7 @@ public class ClientCnxn {
                         }
                     }
                     selected.clear();
-                } catch (Exception e) {
+                } catch (Throwable e) {
                     if (closing) {
                         if (LOG.isDebugEnabled()) {
                             // closing so this is expected

Modified: zookeeper/branches/branch-3.3/src/java/main/org/apache/zookeeper/server/DataTree.java
URL: http://svn.apache.org/viewvc/zookeeper/branches/branch-3.3/src/java/main/org/apache/zookeeper/server/DataTree.java?rev=1177854&r1=1177853&r2=1177854&view=diff
==============================================================================
--- zookeeper/branches/branch-3.3/src/java/main/org/apache/zookeeper/server/DataTree.java (original)
+++ zookeeper/branches/branch-3.3/src/java/main/org/apache/zookeeper/server/DataTree.java Fri Sep 30 21:59:46 2011
@@ -197,7 +197,7 @@ public class DataTree {
     /**
      * converts a list of longs to a list of acls.
      *
-     * @param longs
+     * @param longVal
      *            the list of longs
      * @return a list of ACLs that map to longs
      */
@@ -607,7 +607,7 @@ public class DataTree {
     /**
      * If there is a quota set, return the appropriate prefix for that quota
      * Else return null
-     * @param The ZK path to check for quota
+     * @param path The ZK path to check for quota
      * @return Max quota prefix, or null if none
      */
     public String getMaxPrefixWithQuota(String path) {
@@ -855,9 +855,7 @@ public class DataTree {
      *
      * @param path
      *            the path to be used
-     * @param bytes
-     *            the long bytes
-     * @param count
+     * @param counts
      *            the int count
      */
     private void getCounts(String path, Counts counts) {