This is an automated email from the ASF dual-hosted git repository. marat pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
The following commit(s) were added to refs/heads/main by this push: new cece698f #536: Added Fault Tolerance (#659) cece698f is described below commit cece698fa2267f618a1a830d080a1de455836a0a Author: Rafael Marques <rafam...@gmail.com> AuthorDate: Wed Feb 15 13:48:25 2023 -0300 #536: Added Fault Tolerance (#659) * Updated the Frontend folder for How to build Karavan, it was wrong with an older folder * Updated DEV file * Added Fault Tolerance with Retry and Circuit Breaker) * the circuit opens if half of the requests (failureRatio = 0.5) of ten consecutive invocations (requestVolumeThreshold=4) fail. * resolve #536 --- .../org/apache/camel/karavan/service/StatusService.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/StatusService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/StatusService.java index ed95a39e..c59d1440 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/service/StatusService.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/StatusService.java @@ -30,6 +30,8 @@ import org.apache.camel.karavan.model.DeploymentStatus; import org.apache.camel.karavan.model.Environment; import org.apache.camel.karavan.model.Project; import org.eclipse.microprofile.config.inject.ConfigProperty; +import org.eclipse.microprofile.faulttolerance.Retry; +import org.eclipse.microprofile.faulttolerance.CircuitBreaker; import org.jboss.logging.Logger; import javax.enterprise.context.ApplicationScoped; @@ -40,6 +42,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; @ApplicationScoped @@ -133,10 +136,18 @@ public class StatusService { } } + @Retry(maxRetries = 6, maxDuration=100) + @CircuitBreaker(requestVolumeThreshold = 10, failureRatio = 0.5, delay = 1000) + public HttpResponse<Buffer> bufferResult(String url, int timeout) throws InterruptedException, ExecutionException { + HttpResponse<Buffer> result = getWebClient().getAbs(url).timeout(timeout).send().subscribeAsCompletionStage().toCompletableFuture().get(); + return result; + } + + private CamelStatus getCamelStatus(String projectId, String url, String runtime) { // TODO: make it reactive try { - HttpResponse<Buffer> result = getWebClient().getAbs(url).timeout(1000).send().subscribeAsCompletionStage().toCompletableFuture().get(); + HttpResponse<Buffer> result = bufferResult(url, 1000); if (result.statusCode() == 200) { JsonObject res = result.bodyAsJsonObject(); if (runtime.equalsIgnoreCase("quarkus")) {