From 7c77fcf7efb19b890634a976456b5b83eadf772c Mon Sep 17 00:00:00 2001
From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com>
Date: Mon, 7 Apr 2025 17:09:35 +0200
Subject: [PATCH] OZG-7573 OZG-7991 Send GrpcRouteForwardingRequest only once

---
 .../vorgang/redirect/EingangForwarder.java       | 16 ++++++----------
 .../vorgang/redirect/EingangForwarderTest.java   | 10 ++++++++++
 2 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java
index 144022330..655df82a5 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java
@@ -68,7 +68,7 @@ import net.devh.boot.grpc.client.inject.GrpcClient;
 @Log4j2
 class EingangForwarder {
 
-	static final int TIMEOUT_MINUTES = 10;
+	static final int TIMEOUT_MINUTES = 2;
 
 	@GrpcClient("forwarder")
 	private final RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub;
@@ -102,9 +102,12 @@ class EingangForwarder {
 	}
 
 	Runnable getSendRouteForwardingRunnable(GrpcRouteForwarding grpcRouteForwarding, CompletableFuture<Void> future) {
+		var executed = new AtomicBoolean();
 		return () -> {
-			requestObserver.onNext(GrpcRouteForwardingRequest.newBuilder().setRouteForwarding(grpcRouteForwarding).build());
-			future.complete(null);
+			if (!executed.compareAndExchange(false, true)) {
+				requestObserver.onNext(GrpcRouteForwardingRequest.newBuilder().setRouteForwarding(grpcRouteForwarding).build());
+				future.complete(null);
+			}
 		};
 	}
 
@@ -284,13 +287,6 @@ class EingangForwarder {
 				var delegate = this.delegate.get();
 				if (delegate != null) {
 					delegate.run();
-				} else {
-					try {
-						wait(100);
-					} catch (InterruptedException e) {
-						LOG.debug("Interrupted while waiting for delegate to be set");
-						Thread.currentThread().interrupt();
-					}
 				}
 			}
 		}
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarderTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarderTest.java
index 9681f8c6f..3c58b837e 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarderTest.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarderTest.java
@@ -44,6 +44,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.BiFunction;
 import java.util.function.Consumer;
+import java.util.stream.IntStream;
 
 import org.apache.commons.lang3.RandomUtils;
 import org.junit.jupiter.api.AfterEach;
@@ -260,6 +261,15 @@ class EingangForwarderTest {
 
 			verify(future).complete(null);
 		}
+
+		@Test
+		void shouldRunOnlyOnce() {
+			var runnable = forwarder.getSendRouteForwardingRunnable(grpcRouteForwarding, future);
+
+			IntStream.range(0, 3).forEach(i -> runnable.run());
+
+			verify(requestObserver, times(1)).onNext(any());
+		}
 	}
 
 	@Nested
-- 
GitLab