From 59a45ede627fff5ed6aec710e541e10815c85281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Mon, 11 Sep 2023 12:34:16 +0200 Subject: [PATCH] DM-410: Changed from drools timeout handling from CompletableFuture to... --- .../service/DroolsExecutionService.java | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java index 8a0727e3..02f2fa84 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java @@ -5,11 +5,9 @@ import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.LinkedList; import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; +import java.util.concurrent.*; +import com.google.common.util.concurrent.SimpleTimeLimiter; import com.iqser.red.service.redaction.v1.server.exception.DroolsTimeoutException; import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings; import feign.FeignException; @@ -59,7 +57,6 @@ public class DroolsExecutionService { RedactionServiceSettings settings; - @Timed("redactmanager_executeRules") public List executeRules(KieContainer kieContainer, Document document, @@ -110,23 +107,21 @@ public class DroolsExecutionService { kieSession.getAgenda().getAgendaGroup("LOCAL_DICTIONARY_ADDS").setFocus(); - CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> { - kieSession.fireAllRules(); - return null; - }); + + SimpleTimeLimiter limiter = SimpleTimeLimiter.create(Executors.newSingleThreadExecutor()); try { - completableFuture.orTimeout(settings.getDroolsExecutionTimeoutSecs(), TimeUnit.SECONDS).get(); - } catch (ExecutionException e) { + limiter.runWithTimeout(kieSession::fireAllRules, settings.getDroolsExecutionTimeoutSecs(), TimeUnit.SECONDS); + + } catch (TimeoutException e) { kieSession.dispose(); - if(e.getCause() instanceof TimeoutException){ - throw new DroolsTimeoutException(e, false); - } - throw new RuntimeException(e); + throw new DroolsTimeoutException(e, false); } catch (InterruptedException e) { + kieSession.dispose(); throw new RuntimeException(e); } + List resultingFileAttributes = getFileAttributes(kieSession); kieSession.dispose(); return resultingFileAttributes;