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

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


The following commit(s) were added to refs/heads/master by this push:
     new e78ffb563 OOZIE-3688 Introduce retry mechanism when starting embedded 
servlet containers in unit tests (jmakai via dionusos)
e78ffb563 is described below

commit e78ffb56310f4bee7ac053a448b2f25437f22321
Author: Denes Bodo <dionu...@apache.org>
AuthorDate: Wed Dec 14 16:52:59 2022 +0100

    OOZIE-3688 Introduce retry mechanism when starting embedded servlet 
containers in unit tests (jmakai via dionusos)
---
 .../oozie/test/EmbeddedServletContainer.java       | 29 ++++++++++++++++++----
 release-log.txt                                    |  1 +
 2 files changed, 25 insertions(+), 5 deletions(-)

diff --git 
a/core/src/main/java/org/apache/oozie/test/EmbeddedServletContainer.java 
b/core/src/main/java/org/apache/oozie/test/EmbeddedServletContainer.java
index 2fb099f7d..132a69ec9 100644
--- a/core/src/main/java/org/apache/oozie/test/EmbeddedServletContainer.java
+++ b/core/src/main/java/org/apache/oozie/test/EmbeddedServletContainer.java
@@ -49,6 +49,9 @@ public class EmbeddedServletContainer {
     private String contextPath;
     private ServletContextHandler context;
 
+    private static final int CONTAINER_START_DEFAULT_RETRIES = 30;
+    private static final long 
CONTAINER_START_DEFAULT_WAIT_BETWEEN_RETRIES_IN_SECS = 1;
+
     /**
      * Create a servlet container.
      *
@@ -121,14 +124,30 @@ public class EmbeddedServletContainer {
     }
 
     /**
-     * Start the servlet container. <p> The container starts on a free port or 
a specific port.
+     * Start the servlet container with retry mechanism. The default retry 
attempts are 30 with wait times of 30 seconds
+     * in between. The container starts on a free port or a specific port.
      *
-     * @throws Exception thrown if the container could not start.
+     * @throws Exception thrown if the container could not start after 
`retries` number of tries.
      */
     public void start() throws Exception {
-        host = InetAddress.getLocalHost().getHostName();
-        port = startServerWithPort(port);
-        System.out.println("Running embedded servlet container at: http://"; + 
host + ":" + port);
+        for (int i = 0; i <= CONTAINER_START_DEFAULT_RETRIES; i++) {
+            try {
+                host = InetAddress.getLocalHost().getHostName();
+                port = startServerWithPort(port);
+                System.out.println("Running embedded servlet container at: 
http://"; + host + ":" + port);
+                break;
+            } catch (Exception ex) {
+                System.err.println("An exception is thrown while starting 
embedded servlet container at port: "
+                        + port + ". Exception:\n" + ex.getMessage());
+
+                // throw exception if the last re-try fails
+                if (i >= CONTAINER_START_DEFAULT_RETRIES) {
+                    throw ex;
+                }
+
+                
Thread.sleep(CONTAINER_START_DEFAULT_WAIT_BETWEEN_RETRIES_IN_SECS * 1000);
+            }
+        }
     }
 
     /**
diff --git a/release-log.txt b/release-log.txt
index 15f3e58ff..8f067d7ad 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -1,5 +1,6 @@
 -- Oozie 5.3.0 release (trunk - unreleased)
 
+OOZIE-3688 Introduce retry mechanism when starting embedded servlet containers 
in unit tests (jmakai via dionusos)
 OOZIE-3685 Repair flaky testCoordActionInputCheckXCommandUniqueness unit test 
(jmakai via dionusos)
 OOZIE-3686 Repair flaky testRetryConsoleUrlForked unit test (jmakai via 
dionusos)
 OOZIE-3684 Migrate to commons-lang3 again (jmakai via dionusos)

Reply via email to