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 <[email protected]>
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");