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 <ma...@apache.org> 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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org