You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@artemis.apache.org by cl...@apache.org on 2026/03/03 18:06:11 UTC

(artemis) 02/03: NO-JIRA Adding retry on Jolokia HTTP Call

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

clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/artemis.git

commit 8e2e81857dc3733b663d3e3514a55bfb0e1dc1b3
Author: Clebert Suconic <cl...@apache.org>
AuthorDate: Tue Mar 3 11:39:35 2026 -0500

    NO-JIRA Adding retry on Jolokia HTTP Call
    
    this will fix an intermittent issue.
    Right after the server is started accepting messages it could still
    take some time before the web server is accepting messages.
    
    If you retry this test in a loop it will eventually fail.
    
    and it will fail very oftenly on CI machines with more limited
    resources.
---
 .../smoke/jmxrbac/JmxRBACBrokerSecurityTest.java   | 53 +++++++++++++++-------
 1 file changed, 36 insertions(+), 17 deletions(-)

diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/jmxrbac/JmxRBACBrokerSecurityTest.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/jmxrbac/JmxRBACBrokerSecurityTest.java
index 083142355b..d21d5c18a3 100644
--- a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/jmxrbac/JmxRBACBrokerSecurityTest.java
+++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/jmxrbac/JmxRBACBrokerSecurityTest.java
@@ -29,6 +29,7 @@ import javax.management.remote.JMXConnectorFactory;
 import javax.management.remote.JMXServiceURL;
 import java.io.File;
 import java.io.IOException;
+import java.lang.invoke.MethodHandles;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -53,6 +54,7 @@ import org.apache.activemq.artemis.utils.JsonLoader;
 import org.apache.activemq.artemis.utils.VersionLoader;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.HttpHostConnectException;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
@@ -60,11 +62,15 @@ import org.apache.http.util.EntityUtils;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 // clone of JmxRBACTest with jmx security settings in broker.xml and new guard that delegates to security settings
 // configured via -Djavax.management.builder.initial=org.apache.activemq.artemis.core.server.management.ArtemisRbacMBeanServerBuilder
 public class JmxRBACBrokerSecurityTest extends SmokeTestBase {
 
+   private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
    private static final String JMX_SERVER_HOSTNAME = "localhost";
    private static final String JOLOKIA_URL = "http://localhost:8161/console/jolokia";
    private static final int JMX_SERVER_PORT = 10099;
@@ -322,23 +328,36 @@ public class JmxRBACBrokerSecurityTest extends SmokeTestBase {
    }
 
    private void makeJolokiaRequest(String url, String jsonBody, String username, String password, Consumer<HttpResponse> responseConsumer) throws IOException {
-      try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
-         HttpPost httpPost = new HttpPost(url);
-
-         // Set authentication header
-         String auth = username + ":" + password;
-         String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8));
-         httpPost.setHeader("Authorization", "Basic " + encodedAuth);
-
-         // Set required headers for jolokia
-         httpPost.setHeader("Content-Type", "application/json");
-         httpPost.setHeader("Origin", "http://localhost");
-
-         // Set request body
-         StringEntity entity = new StringEntity(jsonBody, StandardCharsets.UTF_8);
-         httpPost.setEntity(entity);
-
-         responseConsumer.accept(httpClient.execute(httpPost));
+      final int retries = 30;
+      for (int i = 0; i < retries; i++) {
+         try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
+            HttpPost httpPost = new HttpPost(url);
+
+            // Set authentication header
+            String auth = username + ":" + password;
+            String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8));
+            httpPost.setHeader("Authorization", "Basic " + encodedAuth);
+
+            // Set required headers for jolokia
+            httpPost.setHeader("Content-Type", "application/json");
+            httpPost.setHeader("Origin", "http://localhost");
+
+            // Set request body
+            StringEntity entity = new StringEntity(jsonBody, StandardCharsets.UTF_8);
+            httpPost.setEntity(entity);
+
+            responseConsumer.accept(httpClient.execute(httpPost));
+            return;
+         } catch (HttpHostConnectException e) {
+            // The web server is probably not active yet, retrying
+            logger.info("Host Exception {}, retrying", e.getMessage());
+            try {
+               // some sleep after a failure
+               Thread.sleep(1000);
+            } catch (Throwable ignored) {
+            }
+         }
       }
+      fail("could not makeJolokiaRequest after " + retries + " retries");
    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@artemis.apache.org
For additional commands, e-mail: commits-help@artemis.apache.org