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

Reply via email to