This is an automated email from the ASF dual-hosted git repository.
arshad pushed a commit to branch branch-3.7
in repository https://gitbox.apache.org/repos/asf/zookeeper.git
The following commit(s) were added to refs/heads/branch-3.7 by this push:
new c517b04 ZOOKEEPER-4270: Flaky test:
QuorumPeerMainTest#testLeaderOutOfView
c517b04 is described below
commit c517b04f90b76596da59fcc61b8d18cfc312260a
Author: Mohammad Arshad <[email protected]>
AuthorDate: Tue Mar 30 16:56:40 2021 +0530
ZOOKEEPER-4270: Flaky test: QuorumPeerMainTest#testLeaderOutOfView
The test case is expecting node3 to be leader but node2 sometimes becomes
leader. This happens because leader election completes between node1 and node2
which is valid.
Changed the expectations when node2 is leader otherwise kept the same
expectations
Author: Mohammad Arshad <[email protected]>
Reviewers: Enrico Olivelli <[email protected]>
Closes #1666 from arshadmohammad/ZOOKEEPER-4270-master
(cherry picked from commit 3961bcc7d6eabfe0723c9dab653d9bb83da7f8f8)
Signed-off-by: Mohammad Arshad <[email protected]>
---
.../server/quorum/QuorumPeerMainTest.java | 34 +++++++++++++++++-----
1 file changed, 27 insertions(+), 7 deletions(-)
diff --git
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java
index bc00d21..724356e 100644
---
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java
+++
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java
@@ -903,11 +903,26 @@ public class QuorumPeerMainTest extends
QuorumPeerTestBase {
"waiting for server to start");
}
- assertTrue(svrs.mt[0].getQuorumPeer().getPeerState() ==
QuorumPeer.ServerState.LOOKING);
-
assertTrue(svrs.mt[highestServerIndex].getQuorumPeer().getPeerState()
- == QuorumPeer.ServerState.LEADING);
+ // Expecting that only 3 node will be leader is wrong, even 2 node
can be leader, when cluster is formed with 1 node
+ boolean firstAndSecondNodeFormedCluster = false;
+ if (QuorumPeer.ServerState.LEADING ==
svrs.mt[1].getQuorumPeer().getPeerState()) {
+ assertEquals(QuorumPeer.ServerState.FOLLOWING,
+ svrs.mt[0].getQuorumPeer().getPeerState());
+ assertEquals(QuorumPeer.ServerState.FOLLOWING,
+
svrs.mt[highestServerIndex].getQuorumPeer().getPeerState());
+ firstAndSecondNodeFormedCluster = true;
+ } else {
+ // Verify leader out of view scenario
+ assertEquals(QuorumPeer.ServerState.LOOKING,
+ svrs.mt[0].getQuorumPeer().getPeerState());
+ assertEquals(QuorumPeer.ServerState.LEADING,
+
svrs.mt[highestServerIndex].getQuorumPeer().getPeerState());
+ }
for (int i = 1; i < highestServerIndex; i++) {
- assertTrue(svrs.mt[i].getQuorumPeer().getPeerState() ==
QuorumPeer.ServerState.FOLLOWING);
+ assertTrue(
+ svrs.mt[i].getQuorumPeer().getPeerState() ==
QuorumPeer.ServerState.FOLLOWING
+ || svrs.mt[i].getQuorumPeer().getPeerState()
+ == QuorumPeer.ServerState.LEADING);
}
// Look through the logs for output that indicates Node 1 is
LEADING or FOLLOWING
@@ -920,13 +935,18 @@ public class QuorumPeerMainTest extends
QuorumPeerTestBase {
foundLeading = leading.matcher(line).matches();
foundFollowing = following.matcher(line).matches();
}
+ if (firstAndSecondNodeFormedCluster) {
+ assertTrue(foundFollowing,
+ "Corrupt peer should join quorum with servers having same
server configuration");
+ } else {
+ assertFalse(foundLeading, "Corrupt peer should never become
leader");
+ assertFalse(foundFollowing,
+ "Corrupt peer should not attempt connection to out of view
leader");
+ }
} finally {
qlogger.removeAppender(appender);
}
-
- assertFalse(foundLeading, "Corrupt peer should never become leader");
- assertFalse(foundFollowing, "Corrupt peer should not attempt
connection to out of view leader");
}
@Test