This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/master by this push:
new 53c304a Fix (hopefully) intermittent test failures.
53c304a is described below
commit 53c304ad1f65a09c921c40e03a115de438f6c68a
Author: Mark Thomas <[email protected]>
AuthorDate: Wed Sep 9 20:22:57 2020 +0100
Fix (hopefully) intermittent test failures.
Refactor the test to check the coordinator election has completed before
performing tests that assume that the election has finished.
---
.../interceptors/TestNonBlockingCoordinator.java | 63 +++++++++++++++++-----
1 file changed, 49 insertions(+), 14 deletions(-)
diff --git
a/test/org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
b/test/org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
index 4c0d0ed..3d5d4ff 100644
---
a/test/org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
+++
b/test/org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
@@ -54,7 +54,6 @@ public class TestNonBlockingCoordinator {
public void run() {
try {
channels[j].start(Channel.DEFAULT);
- Thread.sleep(50);
} catch (Exception x) {
x.printStackTrace();
}
@@ -68,9 +67,28 @@ public class TestNonBlockingCoordinator {
for (int i = 0; i < CHANNEL_COUNT; i++) {
threads[i].join();
}
- Thread.sleep(1000);
+
+ // Allow up to 30s for cluster to form once all the nodes have been
+ // started
+ int count = 0;
+ Member member = null;
+ boolean electionComplete = false;
+ while (!electionComplete && count < 300) {
+ electionComplete = true;
+ member = coordinators[0].getCoordinator();
+ if (member == null) {
+ electionComplete = false;
+ } else {
+ for (int i = 0; i < CHANNEL_COUNT; i++) {
+ electionComplete = electionComplete &&
(member.equals(coordinators[i].getCoordinator()));
+ }
+ }
+ Thread.sleep(100);
+ count++;
+ }
}
+
@Test
public void testCoord1() throws Exception {
int expectedCount = channels[0].getMembers().length;
@@ -79,34 +97,30 @@ public class TestNonBlockingCoordinator {
Assert.assertEquals("Member count expected to be equal.",
expectedCount,
channels[i].getMembers().length);
}
+
Member member = coordinators[0].getCoordinator();
- int cnt = 0;
- while (member == null && (cnt++ < 100)) {
- try {
- Thread.sleep(100);
- member = coordinators[0].getCoordinator();
- } catch (Exception x) {
- /* Ignore */
- }
- }
log.info("Coordinator[0] is:" + member);
for (int i = 0; i < CHANNEL_COUNT; i++) {
- Assert.assertEquals("Local member" +
channels[i].getLocalMember(false), member, coordinators[i].getCoordinator());
+ Assert.assertEquals("Local member " +
channels[i].getLocalMember(false), member, coordinators[i].getCoordinator());
}
}
+
@Test
public void testCoord2() throws Exception {
+ // Stop current coordinator to trigger new election
Member member = coordinators[1].getCoordinator();
System.out.println("Coordinator[2a] is:" + member);
int index = -1;
- for ( int i=0; i<CHANNEL_COUNT; i++ ) {
- if ( channels[i].getLocalMember(false).equals(member) ) {
+ for (int i = 0; i < CHANNEL_COUNT; i++) {
+ if (channels[i].getLocalMember(false).equals(member)) {
System.out.println("Shutting down:" +
channels[i].getLocalMember(true).toString());
channels[i].stop(Channel.DEFAULT);
index = i;
+ break;
}
}
+
int dead = index;
Thread.sleep(1000);
if (index == 0) {
@@ -114,6 +128,27 @@ public class TestNonBlockingCoordinator {
} else {
index = 0;
}
+
+ // Allow up to 30s for election to complete
+ int count = 0;
+ member = null;
+ boolean electionComplete = false;
+ while (!electionComplete && count < 300) {
+ electionComplete = true;
+ member = coordinators[index].getCoordinator();
+ if (member == null) {
+ electionComplete = false;
+ } else {
+ for (int i = 0; i < CHANNEL_COUNT; i++) {
+ if (i != dead) {
+ electionComplete = electionComplete &&
(member.equals(coordinators[i].getCoordinator()));
+ }
+ }
+ }
+ Thread.sleep(100);
+ count++;
+ }
+
System.out.println("Member
count:"+channels[index].getMembers().length);
member = coordinators[index].getCoordinator();
for (int i = 1; i < CHANNEL_COUNT; i++) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]