This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/master by this push:
new b6cb9fb1e8 Console: refining connection and resource checks in Topology
b6cb9fb1e8 is described below
commit b6cb9fb1e875f28964283f03dfa3a77e1f1ee07a
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Thu Aug 7 15:57:13 2025 +0200
Console: refining connection and resource checks in Topology
---
.../topology/TopologyWebSocketBehavior.java | 88 +++++++++++-----------
1 file changed, 45 insertions(+), 43 deletions(-)
diff --git
a/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
b/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
index d0cb924209..1c81d023b6 100644
---
a/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
+++
b/client/idm/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
@@ -26,6 +26,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
@@ -42,6 +43,7 @@ import org.apache.wicket.protocol.ws.api.message.TextMessage;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.core.task.SimpleAsyncTaskExecutor;
public class TopologyWebSocketBehavior extends WebSocketBehavior {
@@ -55,38 +57,6 @@ public class TopologyWebSocketBehavior extends
WebSocketBehavior {
protected static final String RESOURCE_TEST_TIMEOUT_PARAMETER =
"resource.test.timeout";
- protected static void timeoutHandlingConnectionChecker(
- final Checker checker,
- final Integer timeout,
- final Map<String, String> responses,
- final Set<String> running) {
-
- String response = null;
- try {
- if (timeout == null || timeout < 0) {
- LOG.debug("No timeouts for resource connection checking ... ");
- response = checker.call();
- } else if (timeout > 0) {
- LOG.debug("Timeouts provided for resource connection checking
... ");
- response =
SyncopeConsoleSession.get().execute(checker).get(timeout, TimeUnit.SECONDS);
- }
- } catch (InterruptedException | TimeoutException e) {
- LOG.warn("Connection with {} timed out", checker.key);
- response = String.format("{ \"status\": \"%s\", \"target\":
\"%s\"}",
- TopologyNode.Status.UNREACHABLE, checker.key);
- } catch (Exception e) {
- LOG.error("Unexpected exception connecting to {}", checker.key, e);
- response = String.format("{ \"status\": \"%s\", \"target\":
\"%s\"}",
- TopologyNode.Status.FAILURE, checker.key);
- }
-
- if (response != null) {
- responses.put(checker.key, response);
- }
-
- running.remove(checker.key);
- }
-
@SpringBean
protected ServiceOps serviceOps;
@@ -107,6 +77,8 @@ public class TopologyWebSocketBehavior extends
WebSocketBehavior {
protected final Set<String> runningResCheck =
Collections.synchronizedSet(new HashSet<>());
+ protected final transient SimpleAsyncTaskExecutor executor = new
SimpleAsyncTaskExecutor();
+
protected String coreAddress;
protected String domain;
@@ -118,6 +90,8 @@ public class TopologyWebSocketBehavior extends
WebSocketBehavior {
protected Integer resourceTestTimeout = null;
public TopologyWebSocketBehavior() {
+ executor.setVirtualThreads(true);
+
coreAddress = serviceOps.get(NetworkService.Type.CORE).getAddress();
domain = SyncopeConsoleSession.get().getDomain();
jwt = SyncopeConsoleSession.get().getJWT();
@@ -132,6 +106,36 @@ public class TopologyWebSocketBehavior extends
WebSocketBehavior {
}
}
+ protected void timeoutHandlingConnectionChecker(
+ final Checker checker,
+ final Integer timeout,
+ final Map<String, String> responses,
+ final Set<String> running) {
+
+ String response;
+ try {
+ if (timeout == null || timeout < 0) {
+ LOG.debug("No timeouts for resource connection checking ... ");
+ response = checker.call();
+ } else {
+ LOG.debug("Timeouts provided for resource connection checking
... ");
+ response = executor.submit(checker).get(timeout,
TimeUnit.SECONDS);
+ }
+ } catch (InterruptedException | TimeoutException e) {
+ LOG.warn("Connection with {} timed out", checker.key);
+ response = String.format("{ \"status\": \"%s\", \"target\":
\"%s\"}",
+ TopologyNode.Status.UNREACHABLE, checker.key);
+ } catch (Exception e) {
+ LOG.error("Unexpected exception connecting to {}", checker.key, e);
+ response = String.format("{ \"status\": \"%s\", \"target\":
\"%s\"}",
+ TopologyNode.Status.FAILURE, checker.key);
+ }
+
+ Optional.ofNullable(response).ifPresent(r ->
responses.put(checker.key, r));
+
+ running.remove(checker.key);
+ }
+
@Override
protected void onMessage(final WebSocketRequestHandler handler, final
TextMessage message) {
try {
@@ -151,8 +155,8 @@ public class TopologyWebSocketBehavior extends
WebSocketBehavior {
LOG.debug("Running connection check for connector {}",
ckey);
} else {
try {
- SyncopeConsoleSession.get().execute(() ->
timeoutHandlingConnectionChecker(
- new ConnectorChecker(ckey),
connectorTestTimeout, connectors, runningConnCheck));
+ timeoutHandlingConnectionChecker(
+ new ConnectorChecker(ckey),
connectorTestTimeout, connectors, runningConnCheck);
runningConnCheck.add(ckey);
} catch (Exception e) {
@@ -175,8 +179,8 @@ public class TopologyWebSocketBehavior extends
WebSocketBehavior {
LOG.debug("Running connection check for resource {}",
rkey);
} else {
try {
- SyncopeConsoleSession.get().execute(() ->
timeoutHandlingConnectionChecker(
- new ResourceChecker(rkey),
resourceTestTimeout, resources, runningResCheck));
+ timeoutHandlingConnectionChecker(
+ new ResourceChecker(rkey),
resourceTestTimeout, resources, runningResCheck);
runningResCheck.add(rkey);
} catch (Exception e) {
@@ -207,7 +211,7 @@ public class TopologyWebSocketBehavior extends
WebSocketBehavior {
return this.resources.keySet().containsAll(resources);
}
- private abstract class Checker implements Callable<String> {
+ protected abstract class Checker implements Callable<String> {
protected final String key;
@@ -216,7 +220,7 @@ public class TopologyWebSocketBehavior extends
WebSocketBehavior {
}
}
- private class ConnectorChecker extends Checker {
+ protected class ConnectorChecker extends Checker {
ConnectorChecker(final String key) {
super(key);
@@ -230,13 +234,12 @@ public class TopologyWebSocketBehavior extends
WebSocketBehavior {
? TopologyNode.Status.REACHABLE :
TopologyNode.Status.UNREACHABLE, key);
} catch (Exception e) {
LOG.warn("Error checking connection for {}", key, e);
- return String.format("{ \"status\": \"%s\", \"target\":
\"%s\"}",
- TopologyNode.Status.FAILURE, key);
+ return String.format("{ \"status\": \"%s\", \"target\":
\"%s\"}", TopologyNode.Status.FAILURE, key);
}
}
}
- private class ResourceChecker extends Checker {
+ protected class ResourceChecker extends Checker {
ResourceChecker(final String key) {
super(key);
@@ -250,8 +253,7 @@ public class TopologyWebSocketBehavior extends
WebSocketBehavior {
? TopologyNode.Status.REACHABLE :
TopologyNode.Status.UNREACHABLE, key);
} catch (Exception e) {
LOG.warn("Error checking connection for {}", key, e);
- return String.format("{ \"status\": \"%s\", \"target\":
\"%s\"}",
- TopologyNode.Status.FAILURE, key);
+ return String.format("{ \"status\": \"%s\", \"target\":
\"%s\"}", TopologyNode.Status.FAILURE, key);
}
}
}