You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2026/01/27 15:14:43 UTC
(camel) branch main updated: fix(components): resilience4j default executor service
This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 6166ae32acd8 fix(components): resilience4j default executor service
6166ae32acd8 is described below
commit 6166ae32acd86c471029334c8e755a38e2669844
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Mon Jan 26 15:35:42 2026 +0100
fix(components): resilience4j default executor service
Previously the executorService was defaulted to ForkJoinPool.commonPool() which, above all on JDK25, is not deterministic, causing test flakiness. We are now creating a thread pool which is going to be used in order to make the implementation depends entirely on our business logic.
Closes CAMEL-22906
---
.../component/resilience4j/ResilienceProcessor.java | 8 ++------
.../camel/component/resilience4j/ResilienceReifier.java | 17 +++++++++++++----
.../component/resilience4j/ResilienceTimeoutTest.java | 3 ---
.../resilience4j/ResilienceTimeoutThreadPoolTest.java | 3 ---
4 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
index 8b8a72b9f54f..6c111e592960 100644
--- a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
+++ b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
@@ -516,12 +516,8 @@ public class ResilienceProcessor extends BaseProcessorSupport
Callable<Exchange> callable;
if (timeLimiter != null) {
- Supplier<CompletableFuture<Exchange>> futureSupplier;
- if (executorService == null) {
- futureSupplier = () -> CompletableFuture.supplyAsync(ftask);
- } else {
- futureSupplier = () -> CompletableFuture.supplyAsync(ftask, executorService);
- }
+ Supplier<CompletableFuture<Exchange>> futureSupplier
+ = () -> CompletableFuture.supplyAsync(ftask, executorService);
callable = TimeLimiter.decorateFutureSupplier(timeLimiter, futureSupplier);
} else {
callable = task;
diff --git a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java
index 8411a707bfba..d0f386e95ae2 100644
--- a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java
+++ b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java
@@ -212,17 +212,26 @@ public class ResilienceReifier extends ProcessorReifier<CircuitBreakerDefinition
return;
}
+ ExecutorService executorService;
+ boolean shutdownThreadPool = false;
+
if (config.getTimeoutExecutorService() != null) {
String ref = config.getTimeoutExecutorService();
- boolean shutdownThreadPool = false;
- ExecutorService executorService = lookupByNameAndType(ref, ExecutorService.class);
+ executorService = lookupByNameAndType(ref, ExecutorService.class);
if (executorService == null) {
executorService = lookupExecutorServiceRef("CircuitBreaker", definition, ref);
shutdownThreadPool = true;
}
- processor.setExecutorService(executorService);
- processor.setShutdownExecutorService(shutdownThreadPool);
+ } else {
+ // A default thread pool if none is provided.
+ executorService = camelContext.getExecutorServiceManager()
+ .newThreadPool(this, "CircuitBreaker",
+ camelContext.getExecutorServiceManager().getDefaultThreadPoolProfile());
+ shutdownThreadPool = true;
}
+
+ processor.setExecutorService(executorService);
+ processor.setShutdownExecutorService(shutdownThreadPool);
}
// *******************************
diff --git a/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResilienceTimeoutTest.java b/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResilienceTimeoutTest.java
index 9d02eb18f889..93088b5f3449 100644
--- a/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResilienceTimeoutTest.java
+++ b/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResilienceTimeoutTest.java
@@ -21,7 +21,6 @@ import java.util.concurrent.TimeoutException;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -55,12 +54,10 @@ public class ResilienceTimeoutTest extends CamelTestSupport {
}
@Test
- @Disabled("manual testing")
public void testSlowLoop() {
// this calls the slow route and therefore causes a timeout which
// triggers an exception
for (int i = 0; i < 10; i++) {
- log.info(">>> test run {} <<<", i);
Exception exception = assertThrows(Exception.class,
() -> template.requestBody("direct:start", "slow"),
"Should fail due to timeout");
diff --git a/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResilienceTimeoutThreadPoolTest.java b/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResilienceTimeoutThreadPoolTest.java
index 77bfd4f7a42c..b86fe012799f 100644
--- a/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResilienceTimeoutThreadPoolTest.java
+++ b/components/camel-resilience4j/src/test/java/org/apache/camel/component/resilience4j/ResilienceTimeoutThreadPoolTest.java
@@ -24,7 +24,6 @@ import org.apache.camel.BindToRegistry;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -84,12 +83,10 @@ public class ResilienceTimeoutThreadPoolTest extends CamelTestSupport {
}
@Test
- @Disabled("manual testing")
public void testSlowLoop() {
// this calls the slow route and therefore causes a timeout which
// triggers an exception
for (int i = 0; i < 10; i++) {
- log.info(">>> test run {} <<<", i);
Exception exception = assertThrows(Exception.class,
() -> template.requestBody("direct:start", "slow"),
"Should fail due to timeout");