You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by mi...@apache.org on 2014/08/20 06:07:17 UTC
svn commit: r1619030 - in /zookeeper/trunk: CHANGES.txt
src/java/test/org/apache/zookeeper/test/ReconfigTest.java
Author: michim
Date: Wed Aug 20 04:07:16 2014
New Revision: 1619030
URL: http://svn.apache.org/r1619030
Log:
ZOOKEEPER-2000. Fix ReconfigTest.testPortChange (Alexander Shraer via michim)
Modified:
zookeeper/trunk/CHANGES.txt
zookeeper/trunk/src/java/test/org/apache/zookeeper/test/ReconfigTest.java
Modified: zookeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/trunk/CHANGES.txt?rev=1619030&r1=1619029&r2=1619030&view=diff
==============================================================================
--- zookeeper/trunk/CHANGES.txt (original)
+++ zookeeper/trunk/CHANGES.txt Wed Aug 20 04:07:16 2014
@@ -760,6 +760,8 @@ BUGFIXES:
ZOOKEEPER-1988. new test patch to verify dynamic reconfig backward
compatibility (Alexander Shraer via rakeshr)
+ ZOOKEEPER-2000. Fix ReconfigTest.testPortChange (Alexander Shraer via michim)
+
IMPROVEMENTS:
ZOOKEEPER-1170. Fix compiler (eclipse) warnings: unused imports,
Modified: zookeeper/trunk/src/java/test/org/apache/zookeeper/test/ReconfigTest.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/ReconfigTest.java?rev=1619030&r1=1619029&r2=1619030&view=diff
==============================================================================
--- zookeeper/trunk/src/java/test/org/apache/zookeeper/test/ReconfigTest.java (original)
+++ zookeeper/trunk/src/java/test/org/apache/zookeeper/test/ReconfigTest.java Wed Aug 20 04:07:16 2014
@@ -571,65 +571,62 @@ public class ReconfigTest extends ZKTest
int leaderIndex = getLeaderId(qu);
int followerIndex = leaderIndex == 1 ? 2 : 1;
- // change leader into observer, and modify all its ports at the same
- // time
- int observerIndex = leaderIndex;
-
- // new ports
- int port1 = PortAssignment.unique();
- int port2 = PortAssignment.unique();
- int port3 = PortAssignment.unique();
- joiningServers.add("server." + observerIndex + "=localhost:" + port1
- + ":" + port2 + ":observer;localhost:" + port3);
+ // modify follower's client port
+
+ int quorumPort = qu.getPeer(followerIndex).peer.getQuorumAddress().getPort();
+ int electionPort = qu.getPeer(followerIndex).peer.getElectionAddress().getPort();
+ int oldClientPort = qu.getPeer(followerIndex).peer.getClientPort();
+ int newClientPort = PortAssignment.unique();
+ joiningServers.add("server." + followerIndex + "=localhost:" + quorumPort
+ + ":" + electionPort + ":participant;localhost:" + newClientPort);
// create a /test znode and check that read/write works before
// any reconfig is invoked
- testNormalOperation(zkArr[observerIndex], zkArr[followerIndex]);
+ testNormalOperation(zkArr[followerIndex], zkArr[leaderIndex]);
reconfig(zkArr[followerIndex], joiningServers, null, null, -1);
- // the change of port may not be immediate -- we repeatedly
- // invoke an operation expecting it to eventually fail once
- // the client port of observerIndex changes. If it didn't
- // change -- that's an error.
try {
- for (int i=0; i < 30; i++) {
+ for (int i=0; i < 20; i++) {
Thread.sleep(1000);
- zkArr[observerIndex].setData("/test", "teststr".getBytes(), -1);
+ zkArr[followerIndex].setData("/test", "teststr".getBytes(), -1);
}
- Assert.fail("client port didn't change");
} catch (KeeperException.ConnectionLossException e) {
- zkArr[observerIndex] = new ZooKeeper("127.0.0.1:"
- + qu.getPeer(observerIndex).peer.getClientPort(),
- ClientBase.CONNECTION_TIMEOUT, new Watcher() {
- public void process(WatchedEvent event) {}});
+ Assert.fail("Existing client disconnected when client port changed!");
}
- leaderIndex = getLeaderId(qu);
+ zkArr[followerIndex].close();
+ zkArr[followerIndex] = new ZooKeeper("127.0.0.1:"
+ + oldClientPort,
+ ClientBase.CONNECTION_TIMEOUT, new Watcher() {
+ public void process(WatchedEvent event) {}});
+ for (int i = 0; i < 10; i++) {
+ try {
+ Thread.sleep(1000);
+ zkArr[followerIndex].setData("/test", "teststr".getBytes(), -1);
+ Assert.fail("New client connected to old client port!");
+ } catch (KeeperException.ConnectionLossException e) {
+ }
+ }
- followerIndex = 1;
- while (followerIndex == leaderIndex || followerIndex == observerIndex)
- followerIndex++;
-
- testNormalOperation(zkArr[observerIndex], zkArr[followerIndex]);
-
- testServerHasConfig(zkArr[observerIndex], joiningServers, null);
-
- Assert.assertTrue(qu.getPeer(observerIndex).peer.getQuorumAddress()
- .getPort() == port1);
- Assert.assertTrue(qu.getPeer(observerIndex).peer.getElectionAddress()
- .getPort() == port2);
- Assert.assertTrue(qu.getPeer(observerIndex).peer.getClientPort() == port3);
- Assert.assertTrue(qu.getPeer(observerIndex).peer.getPeerState() == ServerState.OBSERVING);
- Assert.assertTrue(qu.getPeer(observerIndex).peer.getName()
- .endsWith(String.format(":%d", port3)));
+ zkArr[followerIndex].close();
+ zkArr[followerIndex] = new ZooKeeper("127.0.0.1:"
+ + newClientPort,
+ ClientBase.CONNECTION_TIMEOUT, new Watcher() {
+ public void process(WatchedEvent event) {}});
+
+ testNormalOperation(zkArr[followerIndex], zkArr[leaderIndex]);
+ testServerHasConfig(zkArr[followerIndex], joiningServers, null);
+ Assert.assertTrue(qu.getPeer(followerIndex).peer.getName()
+ .endsWith(String.format(":%d", newClientPort)));
joiningServers.clear();
// change leader's leading port - should renounce leadership
- port1 = PortAssignment.unique();
- joiningServers.add("server." + leaderIndex + "=localhost:" + port1
+ int newQuorumPort = PortAssignment.unique();
+ joiningServers.add("server." + leaderIndex + "=localhost:"
+ + newQuorumPort
+ ":"
+ qu.getPeer(leaderIndex).peer.getElectionAddress().getPort()
+ ":participant;localhost:"
@@ -637,18 +634,15 @@ public class ReconfigTest extends ZKTest
reconfig(zkArr[followerIndex], joiningServers, null, null, -1);
- testNormalOperation(zkArr[observerIndex], zkArr[followerIndex]);
+ testNormalOperation(zkArr[followerIndex], zkArr[leaderIndex]);
Assert.assertTrue(qu.getPeer(leaderIndex).peer.getQuorumAddress()
- .getPort() == port1);
- Assert.assertTrue(qu.getPeer(leaderIndex).peer.leader == null
- && qu.getPeer(leaderIndex).peer.follower != null);
- Assert.assertTrue(qu.getPeer(followerIndex).peer.leader != null
- && qu.getPeer(followerIndex).peer.follower == null);
+ .getPort() == newQuorumPort);
+ Assert.assertTrue(getLeaderId(qu) != leaderIndex); // the leader changed
joiningServers.clear();
- // change in leader election port
+ // change everyone's leader election port
for (int i = 1; i <= 3; i++) {
joiningServers.add("server." + i + "=localhost:"