Repository: curator
Updated Branches:
  refs/heads/master 7a60af0dd -> 81fc3d9b2


Fixing connection string construction to ignore wildcard client addresses


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

Branch: refs/heads/master
Commit: 9b73d11bc03c6e37567e237e96c36cdf93e4ff66
Parents: 87a145c
Author: Kenco <[email protected]>
Authored: Mon Mar 13 20:51:42 2017 +0000
Committer: Kenco <[email protected]>
Committed: Mon Mar 13 20:51:42 2017 +0000

----------------------------------------------------------------------
 .../curator/framework/imps/EnsembleTracker.java | 40 +++++++++++++++-----
 .../framework/imps/TestReconfiguration.java     | 32 ++++++++++++++++
 2 files changed, 62 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/9b73d11b/curator-framework/src/main/java/org/apache/curator/framework/imps/EnsembleTracker.java
----------------------------------------------------------------------
diff --git 
a/curator-framework/src/main/java/org/apache/curator/framework/imps/EnsembleTracker.java
 
b/curator-framework/src/main/java/org/apache/curator/framework/imps/EnsembleTracker.java
index 7245ceb..97d8d8c 100644
--- 
a/curator-framework/src/main/java/org/apache/curator/framework/imps/EnsembleTracker.java
+++ 
b/curator-framework/src/main/java/org/apache/curator/framework/imps/EnsembleTracker.java
@@ -20,7 +20,6 @@
 package org.apache.curator.framework.imps;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
 import org.apache.curator.ensemble.EnsembleProvider;
@@ -40,10 +39,11 @@ import 
org.apache.zookeeper.server.quorum.flexible.QuorumMaj;
 import org.apache.zookeeper.server.quorum.flexible.QuorumVerifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.io.ByteArrayInputStream;
 import java.io.Closeable;
+import java.net.InetAddress;
 import java.net.InetSocketAddress;
-import java.util.Arrays;
 import java.util.Properties;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
@@ -166,12 +166,26 @@ public class EnsembleTracker implements Closeable, 
CuratorWatcher
         StringBuilder sb = new StringBuilder();
         for ( QuorumPeer.QuorumServer server : data.getAllMembers().values() )
         {
+            if ( server.clientAddr == null )
+            {
+                // Invalid client address configuration in zoo.cfg
+                continue;
+            }
             if ( sb.length() != 0 )
             {
                 sb.append(",");
             }
-            InetSocketAddress address = 
Objects.firstNonNull(server.clientAddr, server.addr);
-            
sb.append(address.getAddress().getHostAddress()).append(":").append(address.getPort());
+            InetAddress wildcardAddress = new 
InetSocketAddress(0).getAddress();
+            String hostAddress;
+            if ( wildcardAddress.equals(server.clientAddr.getAddress()) )
+            {
+                hostAddress = server.addr.getAddress().getHostAddress();
+            }
+            else
+            {
+                hostAddress = server.clientAddr.getAddress().getHostAddress();
+            }
+            
sb.append(hostAddress).append(":").append(server.clientAddr.getPort());
         }
 
         return sb.toString();
@@ -183,13 +197,19 @@ public class EnsembleTracker implements Closeable, 
CuratorWatcher
         properties.load(new ByteArrayInputStream(data));
         log.info("New config event received: {}", properties);
 
-        QuorumMaj newConfig = new QuorumMaj(properties);
-        currentConfig.set(newConfig);
-
-        String connectionString = configToConnectionString(newConfig);
-        if ( connectionString.trim().length() > 0 )
+        if (!properties.isEmpty())
         {
-            ensembleProvider.setConnectionString(connectionString);
+            QuorumMaj newConfig = new QuorumMaj(properties);
+            String connectionString = configToConnectionString(newConfig);
+            if (connectionString.trim().length() > 0)
+            {
+                currentConfig.set(newConfig);
+                ensembleProvider.setConnectionString(connectionString);
+            }
+            else
+            {
+                log.error("Invalid config event received: {}", properties);
+            }
         }
         else
         {

http://git-wip-us.apache.org/repos/asf/curator/blob/9b73d11b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReconfiguration.java
----------------------------------------------------------------------
diff --git 
a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReconfiguration.java
 
b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReconfiguration.java
index 7565590..52d2860 100644
--- 
a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReconfiguration.java
+++ 
b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReconfiguration.java
@@ -313,6 +313,38 @@ public class TestReconfiguration extends BaseClassForTests
         }
     }
 
+    @Test
+    public void testConfigToConnectionStringNormal() throws Exception
+    {
+        String config = 
"server.1=10.1.2.3:2888:3888:participant;10.2.3.4:2181";
+        String configString = 
EnsembleTracker.configToConnectionString(toQuorumVerifier(config.getBytes()));
+        Assert.assertEquals("10.2.3.4:2181", configString);
+    }
+
+    @Test
+    public void testConfigToConnectionStringNoClientAddr() throws Exception
+    {
+        String config = "server.1=10.1.2.3:2888:3888:participant;2181";
+        String configString = 
EnsembleTracker.configToConnectionString(toQuorumVerifier(config.getBytes()));
+        Assert.assertEquals("10.1.2.3:2181", configString);
+    }
+
+    @Test
+    public void testConfigToConnectionStringWildcardClientAddr() throws 
Exception
+    {
+        String config = "server.1=10.1.2.3:2888:3888:participant;0.0.0.0:2181";
+        String configString = 
EnsembleTracker.configToConnectionString(toQuorumVerifier(config.getBytes()));
+        Assert.assertEquals("10.1.2.3:2181", configString);
+    }
+
+    @Test
+    public void testConfigToConnectionStringNoClientAddrOrPort() throws 
Exception
+    {
+        String config = "server.1=10.1.2.3:2888:3888:participant";
+        String configString = 
EnsembleTracker.configToConnectionString(toQuorumVerifier(config.getBytes()));
+        Assert.assertEquals("", configString);
+    }
+
     private CuratorFramework newClient()
     {
         final AtomicReference<String> connectString = new 
AtomicReference<>(cluster.getConnectString());

Reply via email to