You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by fp...@apache.org on 2013/09/26 00:13:20 UTC
svn commit: r1526317 - in /zookeeper/trunk: ./
src/docs/src/documentation/content/xdocs/
src/java/main/org/apache/zookeeper/server/quorum/
src/java/test/org/apache/zookeeper/test/
Author: fpj
Date: Wed Sep 25 22:13:19 2013
New Revision: 1526317
URL: http://svn.apache.org/r1526317
Log:
ZOOKEEPER-1096. Leader communication should listen on specified IP, not wildcard address (Jared Cantwell, German Blanco via fpj)
Modified:
zookeeper/trunk/CHANGES.txt
zookeeper/trunk/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml
zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/Leader.java
zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java
zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java
zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LENonTerminateTest.java
Modified: zookeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/trunk/CHANGES.txt?rev=1526317&r1=1526316&r2=1526317&view=diff
==============================================================================
--- zookeeper/trunk/CHANGES.txt (original)
+++ zookeeper/trunk/CHANGES.txt Wed Sep 25 22:13:19 2013
@@ -386,6 +386,8 @@ BUGFIXES:
ZOOKEEPER-1753. ClientCnxn is not properly releasing the resources,
which are used to ping RwServer (Rakesh R via fpj)
+ ZOOKEEPER-1096. Leader communication should listen on specified IP, not wildcard address (Jared Cantwell, German Blanco via fpj)
+
IMPROVEMENTS:
ZOOKEEPER-1170. Fix compiler (eclipse) warnings: unused imports,
Modified: zookeeper/trunk/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml?rev=1526317&r1=1526316&r2=1526317&view=diff
==============================================================================
--- zookeeper/trunk/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml (original)
+++ zookeeper/trunk/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml Wed Sep 25 22:13:19 2013
@@ -1109,6 +1109,20 @@ server.3=zoo3:2888:3888</programlisting>
but opens up full access to the data tree to everyone.</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term>quorumListenOnAllIPs</term>
+
+ <listitem>
+ <para>When set to true the ZooKeeper server will listen
+ for connections from its peers on all available IP addresses,
+ and not only the address configured in the server list of the
+ configuration file. It affects the connections handling the
+ ZAB protocol and the Fast Leader Election protocol. Default
+ value is <emphasis role="bold">false</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</section>
Modified: zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/Leader.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/Leader.java?rev=1526317&r1=1526316&r2=1526317&view=diff
==============================================================================
--- zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/Leader.java (original)
+++ zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/Leader.java Wed Sep 25 22:13:19 2013
@@ -47,6 +47,7 @@ import org.apache.zookeeper.server.Reque
import org.apache.zookeeper.server.quorum.QuorumPeer.LearnerType;
import org.apache.zookeeper.server.quorum.flexible.QuorumVerifier;
import org.apache.zookeeper.server.util.ZxidUtils;
+import org.apache.zookeeper.server.ZooKeeperServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -258,12 +259,21 @@ public class Leader {
Leader(QuorumPeer self,LeaderZooKeeperServer zk) throws IOException {
this.self = self;
try {
- ss = new ServerSocket();
+ if (self.getQuorumListenOnAllIPs()) {
+ ss = new ServerSocket(self.getQuorumAddress().getPort());
+ } else {
+ ss = new ServerSocket();
+ }
ss.setReuseAddress(true);
- ss.bind(new InetSocketAddress(self.getQuorumAddress().getPort()));
+ if (!self.getQuorumListenOnAllIPs()) {
+ ss.bind(self.getQuorumAddress());
+ }
} catch (BindException e) {
- LOG.error("Couldn't bind to port "
- + self.getQuorumAddress().getPort(), e);
+ if (self.getQuorumListenOnAllIPs()) {
+ LOG.error("Couldn't bind to port " + self.getQuorumAddress().getPort(), e);
+ } else {
+ LOG.error("Couldn't bind to " + self.getQuorumAddress(), e);
+ }
throw e;
}
this.zk = zk;
Modified: zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java?rev=1526317&r1=1526316&r2=1526317&view=diff
==============================================================================
--- zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java (original)
+++ zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java Wed Sep 25 22:13:19 2013
@@ -529,14 +529,20 @@ public class QuorumCnxManager {
@Override
public void run() {
int numRetries = 0;
+ InetSocketAddress addr;
+
while((!shutdown) && (numRetries < 3)){
try {
ss = new ServerSocket();
ss.setReuseAddress(true);
- InetSocketAddress addr = self.getElectionAddress();
+ if (self.getQuorumListenOnAllIPs()) {
+ int port = self.getElectionAddress().getPort();
+ addr = new InetSocketAddress(port);
+ } else {
+ addr = self.getElectionAddress();
+ }
LOG.info("My election bind port: " + addr.toString());
setName(addr.toString());
- // we used to bind to the * address but this seems more correct
ss.bind(addr);
while (!shutdown) {
Socket client = ss.accept();
Modified: zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java?rev=1526317&r1=1526316&r2=1526317&view=diff
==============================================================================
--- zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java (original)
+++ zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java Wed Sep 25 22:13:19 2013
@@ -409,6 +409,12 @@ public class QuorumPeer extends Thread i
protected volatile int tick;
/**
+ * Whether or not to listen on all IPs for the two quorum ports
+ * (broadcast and fast leader election).
+ */
+ protected boolean quorumListenOnAllIPs = false;
+
+ /**
* @deprecated As of release 3.4.0, this class has been deprecated, since
* it is used with one of the udp-based versions of leader election, which
* we are also deprecating.
@@ -568,13 +574,14 @@ public class QuorumPeer extends Thread i
long myid, int tickTime, int initLimit, int syncLimit,
ServerCnxnFactory cnxnFactory) throws IOException {
this(quorumPeers, dataDir, dataLogDir, electionType, myid, tickTime,
- initLimit, syncLimit, cnxnFactory,
+ initLimit, syncLimit, false, cnxnFactory,
new QuorumMaj(quorumPeers), null);
}
public QuorumPeer(Map<Long, QuorumServer> quorumPeers, File dataDir,
File dataLogDir, int electionType,
long myid, int tickTime, int initLimit, int syncLimit,
+ boolean quorumListenOnAllIPs,
ServerCnxnFactory cnxnFactory,
QuorumVerifier quorumConfig, String memFilename) throws IOException {
this();
@@ -584,6 +591,7 @@ public class QuorumPeer extends Thread i
this.tickTime = tickTime;
this.initLimit = initLimit;
this.syncLimit = syncLimit;
+ this.quorumListenOnAllIPs = quorumListenOnAllIPs;
this.logFactory = new FileTxnSnapLog(dataLogDir, dataDir);
this.zkDb = new ZKDatabase(this.logFactory);
this.dynamicConfigFilename = (memFilename != null) ? memFilename : "zoo_replicated" + myid + ".dynamic";
@@ -707,7 +715,7 @@ public class QuorumPeer extends Thread i
throws IOException
{
this(quorumPeers, snapDir, logDir, electionAlg,
- myid,tickTime, initLimit,syncLimit,
+ myid,tickTime, initLimit,syncLimit, false,
ServerCnxnFactory.createFactory(new InetSocketAddress(clientPort), -1),
new QuorumMaj(quorumPeers), null);
}
@@ -723,7 +731,7 @@ public class QuorumPeer extends Thread i
throws IOException
{
this(quorumPeers, snapDir, logDir, electionAlg,
- myid,tickTime, initLimit,syncLimit,
+ myid,tickTime, initLimit,syncLimit, false,
ServerCnxnFactory.createFactory(new InetSocketAddress(clientPort), -1),
quorumConfig, null);
}
@@ -1302,6 +1310,14 @@ public class QuorumPeer extends Thread i
this.electionType = electionType;
}
+ public boolean getQuorumListenOnAllIPs() {
+ return quorumListenOnAllIPs;
+ }
+
+ public void setQuorumListenOnAllIPs(boolean quorumListenOnAllIPs) {
+ this.quorumListenOnAllIPs = quorumListenOnAllIPs;
+ }
+
public ServerCnxnFactory getCnxnFactory() {
return cnxnFactory;
}
Modified: zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java?rev=1526317&r1=1526316&r2=1526317&view=diff
==============================================================================
--- zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java (original)
+++ zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java Wed Sep 25 22:13:19 2013
@@ -67,6 +67,7 @@ public class QuorumPeerConfig {
protected int syncLimit;
protected int electionAlg = 3;
protected int electionPort = 2182;
+ protected boolean quorumListenOnAllIPs = false;
protected long serverId;
@@ -210,6 +211,8 @@ public class QuorumPeerConfig {
syncLimit = Integer.parseInt(value);
} else if (key.equals("electionAlg")) {
electionAlg = Integer.parseInt(value);
+ } else if (key.equals("quorumListenOnAllIPs")) {
+ quorumListenOnAllIPs = Boolean.parseBoolean(value);
} else if (key.equals("peerType")) {
if (value.toLowerCase().equals("observer")) {
peerType = LearnerType.OBSERVER;
@@ -544,4 +547,8 @@ public class QuorumPeerConfig {
return configBackwardCompatibilityMode;
}
+ public Boolean getQuorumListenOnAllIPs() {
+ return quorumListenOnAllIPs;
+ }
+
}
Modified: zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java?rev=1526317&r1=1526316&r2=1526317&view=diff
==============================================================================
--- zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java (original)
+++ zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java Wed Sep 25 22:13:19 2013
@@ -157,6 +157,7 @@ public class QuorumPeerMain {
quorumPeer.initConfigInZKDatabase();
quorumPeer.setCnxnFactory(cnxnFactory);
quorumPeer.setLearnerType(config.getPeerType());
+ quorumPeer.setQuorumListenOnAllIPs(config.getQuorumListenOnAllIPs());
quorumPeer.start();
quorumPeer.join();
Modified: zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LENonTerminateTest.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LENonTerminateTest.java?rev=1526317&r1=1526316&r2=1526317&view=diff
==============================================================================
--- zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LENonTerminateTest.java (original)
+++ zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LENonTerminateTest.java Wed Sep 25 22:13:19 2013
@@ -216,7 +216,7 @@ public class LENonTerminateTest extends
throws IOException
{
super(quorumPeers, snapDir, logDir, electionAlg,
- myid,tickTime, initLimit,syncLimit,
+ myid,tickTime, initLimit,syncLimit, false,
ServerCnxnFactory.createFactory(clientPort, -1),
new QuorumMaj(quorumPeers), null);
}