This is an automated email from the ASF dual-hosted git repository.

randgalt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/curator.git


The following commit(s) were added to refs/heads/master by this push:
     new f204083  CURATOR-564 (#351)
f204083 is described below

commit f204083e3d1d887971aa6ed34cc8d7f4cd1ecb5e
Author: Jordan Zimmerman <[email protected]>
AuthorDate: Mon Mar 23 15:11:18 2020 -0500

    CURATOR-564 (#351)
    
    Like was done for TestingServer, catch startup issues for TestingCluster 
and then re-recreate and re-start the cluster one time. Hopefully this will 
make the tests more stable.
    
    Co-authored-by: randgalt <[email protected]>
---
 .../curator/framework/imps/TestFrameworkEdges.java |  3 +--
 .../curator/framework/imps/TestReadOnly.java       | 17 +++++++++------
 .../framework/imps/TestReconfiguration.java        | 10 ++++++---
 .../curator/framework/imps/TestWithCluster.java    |  6 ++----
 .../cache/TestPathChildrenCacheInCluster.java      |  8 ++-----
 .../framework/recipes/leader/TestLeaderLatch.java  |  2 +-
 .../recipes/leader/TestLeaderLatchCluster.java     |  4 +---
 .../recipes/leader/TestLeaderSelectorCluster.java  |  6 ++----
 .../locks/TestInterProcessSemaphoreCluster.java    | 11 +++-------
 .../org/apache/curator/test/BaseClassForTests.java | 25 ++++++++++++++++++++++
 10 files changed, 54 insertions(+), 38 deletions(-)

diff --git 
a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkEdges.java
 
b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkEdges.java
index feb22ab..5a7c415 100644
--- 
a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkEdges.java
+++ 
b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkEdges.java
@@ -110,9 +110,8 @@ public class TestFrameworkEdges extends BaseClassForTests
         // by the Instance Curator is connected to but the session kill needs 
a quorum vote (it's a
         // transaction)
 
-        try (TestingCluster cluster = new TestingCluster(3))
+        try (TestingCluster cluster = createAndStartCluster(3))
         {
-            cluster.start();
             InstanceSpec instanceSpec0 = 
cluster.getServers().get(0).getInstanceSpec();
 
             CountDownLatch serverStoppedLatch = new CountDownLatch(1);
diff --git 
a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReadOnly.java
 
b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReadOnly.java
index 13ceec6..b5f90ae 100644
--- 
a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReadOnly.java
+++ 
b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReadOnly.java
@@ -27,6 +27,7 @@ import 
org.apache.curator.framework.state.ConnectionStateListener;
 import org.apache.curator.retry.ExponentialBackoffRetry;
 import org.apache.curator.retry.RetryNTimes;
 import org.apache.curator.retry.RetryOneTime;
+import org.apache.curator.test.BaseClassForTests;
 import org.apache.curator.test.InstanceSpec;
 import org.apache.curator.test.TestingCluster;
 import org.apache.curator.test.Timing;
@@ -40,7 +41,7 @@ import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-public class TestReadOnly
+public class TestReadOnly extends BaseClassForTests
 {
     @BeforeMethod
     public void setup()
@@ -58,12 +59,10 @@ public class TestReadOnly
     public void testConnectionStateNewClient() throws Exception
     {
         Timing timing = new Timing();
-        TestingCluster cluster = new TestingCluster(3);
         CuratorFramework client = null;
+        TestingCluster cluster = createAndStartCluster(3);
         try
         {
-            cluster.start();
-
             client = 
CuratorFrameworkFactory.newClient(cluster.getConnectString(), timing.session(), 
timing.connection(), new RetryOneTime(100));
             client.start();
             client.checkExists().forPath("/");
@@ -116,11 +115,9 @@ public class TestReadOnly
         Timing timing = new Timing();
 
         CuratorFramework client = null;
-        TestingCluster cluster = new TestingCluster(2);
+        TestingCluster cluster = createAndStartCluster(2);
         try
         {
-            cluster.start();
-
             client = 
CuratorFrameworkFactory.builder().connectString(cluster.getConnectString()).canBeReadOnly(true).connectionTimeoutMs(timing.connection()).sessionTimeoutMs(timing.session()).retryPolicy(new
 ExponentialBackoffRetry(100, 3)).build();
             client.start();
 
@@ -167,4 +164,10 @@ public class TestReadOnly
             CloseableUtils.closeQuietly(cluster);
         }
     }
+
+    @Override
+    protected void createServer() throws Exception
+    {
+        // NOP
+    }
 }
diff --git 
a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReconfiguration.java
 
b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReconfiguration.java
index 1ff2805..e3327e0 100644
--- 
a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReconfiguration.java
+++ 
b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestReconfiguration.java
@@ -75,9 +75,7 @@ public class TestReconfiguration extends CuratorTestBase
         
System.setProperty("zookeeper.DigestAuthenticationProvider.superDigest", 
superUserPasswordDigest);
 
         CloseableUtils.closeQuietly(server);
-        server = null;
-        cluster = new TestingCluster(3);
-        cluster.start();
+        cluster = createAndStartCluster(3);
     }
 
     @AfterMethod
@@ -406,6 +404,12 @@ public class TestReconfiguration extends CuratorTestBase
         Assert.assertEquals("127.0.0.1:2181", configString);
     }
 
+    @Override
+    protected void createServer() throws Exception
+    {
+        // NOP
+    }
+
     private CuratorFramework newClient()
     {
         return newClient(cluster.getConnectString());
diff --git 
a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestWithCluster.java
 
b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestWithCluster.java
index bdcb30b..1f1e213 100644
--- 
a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestWithCluster.java
+++ 
b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestWithCluster.java
@@ -42,8 +42,7 @@ public class TestWithCluster extends CuratorTestBase
         Timing              timing = new Timing();
 
         CuratorFramework    client = null;
-        TestingCluster      cluster = new TestingCluster(3);
-        cluster.start();
+        TestingCluster      cluster = createAndStartCluster(3);
         try
         {
             client = 
CuratorFrameworkFactory.newClient(cluster.getConnectString(), timing.session(), 
timing.connection(), new ExponentialBackoffRetry(100, 3));
@@ -90,8 +89,7 @@ public class TestWithCluster extends CuratorTestBase
         Timing              timing = new Timing();
 
         CuratorFramework    client = null;
-        TestingCluster cluster = new TestingCluster(3);
-        cluster.start();
+        TestingCluster cluster = createAndStartCluster(3);
         try
         {
             // make sure all instances are up
diff --git 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCacheInCluster.java
 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCacheInCluster.java
index a9728b5..a8a93a8 100644
--- 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCacheInCluster.java
+++ 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCacheInCluster.java
@@ -45,11 +45,9 @@ public class TestPathChildrenCacheInCluster extends 
BaseClassForTests
         PathChildrenCache cache = null;
         CuratorFramework client1 = null;
         CuratorFramework client2 = null;
-        TestingCluster cluster = new TestingCluster(3);
+        TestingCluster cluster = createAndStartCluster(3);
         try
         {
-            cluster.start();
-
             // client 1 only connects to 1 server
             InstanceSpec client1Instance = 
cluster.getInstances().iterator().next();
             client1 = 
CuratorFrameworkFactory.newClient(client1Instance.getConnectString(), 1000, 
1000, new RetryOneTime(1));
@@ -103,11 +101,9 @@ public class TestPathChildrenCacheInCluster extends 
BaseClassForTests
 
         CuratorFramework client = null;
         PathChildrenCache cache = null;
-        TestingCluster cluster = new TestingCluster(3);
+        TestingCluster cluster = createAndStartCluster(3);
         try
         {
-            cluster.start();
-
             client = 
CuratorFrameworkFactory.newClient(cluster.getConnectString(), timing.session(), 
timing.connection(), new RetryOneTime(1));
             client.start();
             client.create().creatingParentsIfNeeded().forPath("/test");
diff --git 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderLatch.java
 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderLatch.java
index 1fc9ff3..1dca724 100644
--- 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderLatch.java
+++ 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderLatch.java
@@ -187,7 +187,7 @@ public class TestLeaderLatch extends BaseClassForTests
             try ( LeaderLatch latch2 = new LeaderLatch(client, latchPath, "2") 
)
             {
                 latch1.start();
-                latch1.await();
+                Assert.assertTrue(latch1.await(timing.milliseconds(), 
TimeUnit.MILLISECONDS));
 
                 latch2.start(); // will get a watcher on latch1's node
                 timing.sleepABit();
diff --git 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderLatchCluster.java
 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderLatchCluster.java
index 0d08199..752ed4f 100644
--- 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderLatchCluster.java
+++ 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderLatchCluster.java
@@ -57,11 +57,9 @@ public class TestLeaderLatchCluster extends CuratorTestBase
         final int sessionLength = timing.session() / 4;
 
         List<ClientAndLatch>    clients = Lists.newArrayList();
-        TestingCluster          cluster = new TestingCluster(PARTICIPANT_QTY);
+        TestingCluster          cluster = 
createAndStartCluster(PARTICIPANT_QTY);
         try
         {
-            cluster.start();
-
             List<InstanceSpec>      instances = 
Lists.newArrayList(cluster.getInstances());
             for ( int i = 0; i < PARTICIPANT_QTY; ++i )
             {
diff --git 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderSelectorCluster.java
 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderSelectorCluster.java
index 1dd50eb..6849816 100644
--- 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderSelectorCluster.java
+++ 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/leader/TestLeaderSelectorCluster.java
@@ -45,8 +45,7 @@ public class TestLeaderSelectorCluster extends CuratorTestBase
         final Timing        timing = new Timing();
 
         CuratorFramework    client = null;
-        TestingCluster      cluster = new TestingCluster(3);
-        cluster.start();
+        TestingCluster      cluster = createAndStartCluster(3);
         try
         {
             client = 
CuratorFrameworkFactory.newClient(cluster.getConnectString(), timing.session(), 
timing.connection(), new RetryOneTime(1));
@@ -91,8 +90,7 @@ public class TestLeaderSelectorCluster extends CuratorTestBase
         final Timing        timing = new Timing();
 
         CuratorFramework    client = null;
-        TestingCluster      cluster = new TestingCluster(3);
-        cluster.start();
+        TestingCluster      cluster = createAndStartCluster(3);
         try
         {
             client = 
CuratorFrameworkFactory.newClient(cluster.getConnectString(), timing.session(), 
timing.connection(), new RetryOneTime(1));
diff --git 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/locks/TestInterProcessSemaphoreCluster.java
 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/locks/TestInterProcessSemaphoreCluster.java
index 10d4192..3470eff 100644
--- 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/locks/TestInterProcessSemaphoreCluster.java
+++ 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/locks/TestInterProcessSemaphoreCluster.java
@@ -59,11 +59,9 @@ public class TestInterProcessSemaphoreCluster extends 
BaseClassForTests
 
         ExecutorService                 executorService = 
Executors.newFixedThreadPool(CLIENT_QTY);
         ExecutorCompletionService<Void> completionService = new 
ExecutorCompletionService<Void>(executorService);
-        TestingCluster                  cluster = new TestingCluster(3);
+        TestingCluster                  cluster = createAndStartCluster(3);
         try
         {
-            cluster.start();
-
             final AtomicReference<String>   connectionString = new 
AtomicReference<String>(cluster.getConnectString());
             final EnsembleProvider          provider = new EnsembleProvider()
             {
@@ -178,8 +176,7 @@ public class TestInterProcessSemaphoreCluster extends 
BaseClassForTests
             timing.forWaiting().sleepABit();
             Assert.assertEquals(0, acquireCount.get());
 
-            cluster = new TestingCluster(3);
-            cluster.start();
+            cluster = createAndStartCluster(3);
 
             connectionString.set(cluster.getConnectString());
             timing.forWaiting().sleepABit();
@@ -207,12 +204,10 @@ public class TestInterProcessSemaphoreCluster extends 
BaseClassForTests
         ExecutorService                 executorService = 
Executors.newFixedThreadPool(QTY);
         ExecutorCompletionService<Void> completionService = new 
ExecutorCompletionService<Void>(executorService);
         final Timing                    timing = new Timing();
-        TestingCluster                  cluster = new TestingCluster(3);
         List<SemaphoreClient>           semaphoreClients = 
Lists.newArrayList();
+        TestingCluster                  cluster = createAndStartCluster(3);
         try
         {
-            cluster.start();
-
             final AtomicInteger         opCount = new AtomicInteger(0);
             for ( int i = 0; i < QTY; ++i )
             {
diff --git 
a/curator-test/src/main/java/org/apache/curator/test/BaseClassForTests.java 
b/curator-test/src/main/java/org/apache/curator/test/BaseClassForTests.java
index d4bbffb..eb568e9 100644
--- a/curator-test/src/main/java/org/apache/curator/test/BaseClassForTests.java
+++ b/curator-test/src/main/java/org/apache/curator/test/BaseClassForTests.java
@@ -136,6 +136,31 @@ public class BaseClassForTests
         }
     }
 
+    public TestingCluster createAndStartCluster(int qty) throws Exception
+    {
+        TestingCluster cluster = new TestingCluster(qty);
+        try
+        {
+            cluster.start();
+        }
+        catch ( FailedServerStartException e )
+        {
+            log.warn("Failed to start cluster - retrying 1 more time");
+            // cluster creation failed - we've sometime seen this with re-used 
addresses, etc. - retry one more time
+            try
+            {
+                cluster.close();
+            }
+            catch ( Exception ex )
+            {
+                // ignore
+            }
+            cluster = new TestingCluster(qty);
+            cluster.start();
+        }
+        return cluster;
+    }
+
     protected void createServer() throws Exception
     {
         while ( server == null )

Reply via email to