You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2017/11/22 15:59:21 UTC
[2/2] syncope git commit: [SYNCOPE-1238] Stop the AjaxTimerBehavior
once all expected connectors and resources are covered
[SYNCOPE-1238] Stop the AjaxTimerBehavior once all expected connectors and resources are covered
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/3ce92812
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/3ce92812
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/3ce92812
Branch: refs/heads/master
Commit: 3ce928120d58c836bfe10addc4a549d1d049c48a
Parents: e611d3e
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Nov 22 16:55:26 2017 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Nov 22 16:59:07 2017 +0100
----------------------------------------------------------------------
.../client/console/topology/Topology.java | 18 +++++--
.../topology/TopologyWebSocketBehavior.java | 52 +++++++++++---------
2 files changed, 42 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/3ce92812/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
index 722a545..fda5e0e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
@@ -29,6 +29,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors;
+import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.cxf.jaxrs.client.WebClient;
@@ -163,7 +164,8 @@ public class Topology extends BasePage {
}
});
- body.add(new TopologyWebSocketBehavior());
+ final TopologyWebSocketBehavior websocket = new TopologyWebSocketBehavior();
+ body.add(websocket);
togglePanel = new TopologyTogglePanel("toggle", getPageReference());
body.add(togglePanel);
@@ -373,14 +375,15 @@ public class Topology extends BasePage {
// -----------------------------------------
// Add Resources
// -----------------------------------------
- final Collection<String> administrableConns = new HashSet<>();
+ final Collection<String> adminConns = new HashSet<>();
connModel.getObject().values().forEach(connInstances -> {
- administrableConns.addAll(connInstances.stream().map(EntityTO::getKey).collect(Collectors.toList()));
+ adminConns.addAll(connInstances.stream().map(EntityTO::getKey).collect(Collectors.toList()));
});
+ final Set<String> adminRes = new HashSet<>();
final List<String> connToBeProcessed = new ArrayList<>();
resModel.getObject().stream().
- filter((resourceTO) -> (administrableConns.contains(resourceTO.getConnector()))).
+ filter((resourceTO) -> (adminConns.contains(resourceTO.getConnector()))).
forEachOrdered(resourceTO -> {
final TopologyNode topologynode = new TopologyNode(
resourceTO.getKey(), resourceTO.getKey(), TopologyNode.Kind.RESOURCE);
@@ -392,6 +395,9 @@ public class Topology extends BasePage {
connections.put(resourceTO.getConnector(), remoteConnections);
}
remoteConnections.put(topologynode.getKey(), topologynode);
+
+ adminRes.add(resourceTO.getKey());
+
if (!connToBeProcessed.contains(resourceTO.getConnector())) {
connToBeProcessed.add(resourceTO.getConnector());
}
@@ -479,6 +485,10 @@ public class Topology extends BasePage {
@Override
protected void onTimer(final AjaxRequestTarget target) {
+ if (websocket.connCheckDone(adminConns) && websocket.resCheckDone(adminRes)) {
+ stop(target);
+ }
+
target.appendJavaScript("checkConnection()");
if (getUpdateInterval().seconds() < 5.0) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/3ce92812/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
index 6346332..1134a00 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java
@@ -21,6 +21,8 @@ package org.apache.syncope.client.console.topology;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -47,13 +49,15 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
- private final Map<String, String> resources = new HashMap<>();
+ private final Map<String, String> resources =
+ Collections.<String, String>synchronizedMap(new HashMap<String, String>());
- private final Set<String> runningResCheck = new HashSet<>();
+ private final Set<String> runningResCheck = Collections.synchronizedSet(new HashSet<String>());
- private final Map<String, String> connectors = new HashMap<>();
+ private final Map<String, String> connectors =
+ Collections.<String, String>synchronizedMap(new HashMap<String, String>());
- private final Set<String> runningConnCheck = new HashSet<>();
+ private final Set<String> runningConnCheck = Collections.synchronizedSet(new HashSet<String>());
private final ConnectorRestClient connectorRestClient = new ConnectorRestClient();
@@ -75,12 +79,10 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior {
"{ \"status\": \"%s\", \"target\": \"%s\"}", TopologyNode.Status.UNKNOWN, ckey));
}
- synchronized (runningConnCheck) {
- if (runningConnCheck.contains(ckey)) {
- LOG.debug("Running connection check for connector {}", ckey);
- } else {
- runningConnCheck.add(ckey);
- }
+ if (runningConnCheck.contains(ckey)) {
+ LOG.debug("Running connection check for connector {}", ckey);
+ } else {
+ runningConnCheck.add(ckey);
}
SyncopeConsoleSession.get().execute(new ConnCheck(ckey));
@@ -96,12 +98,10 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior {
"{ \"status\": \"%s\", \"target\": \"%s\"}", TopologyNode.Status.UNKNOWN, rkey));
}
- synchronized (runningResCheck) {
- if (runningResCheck.contains(rkey)) {
- LOG.debug("Running connection check for resource {}", rkey);
- } else {
- runningResCheck.add(rkey);
- }
+ if (runningResCheck.contains(rkey)) {
+ LOG.debug("Running connection check for resource {}", rkey);
+ } else {
+ runningResCheck.add(rkey);
}
SyncopeConsoleSession.get().execute(new ResCheck(rkey));
@@ -120,6 +120,14 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior {
}
}
+ public boolean connCheckDone(final Collection<String> connectors) {
+ return this.connectors.keySet().containsAll(connectors);
+ }
+
+ public boolean resCheckDone(final Collection<String> resources) {
+ return this.resources.keySet().containsAll(resources);
+ }
+
class ConnCheck implements Runnable {
private final String key;
@@ -151,10 +159,8 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior {
res = String.format("{ \"status\": \"%s\", \"target\": \"%s\"}", TopologyNode.Status.FAILURE, key);
}
- synchronized (runningConnCheck) {
- connectors.put(key, res);
- runningConnCheck.remove(key);
- }
+ connectors.put(key, res);
+ runningConnCheck.remove(key);
} finally {
ThreadContext.detach();
}
@@ -192,10 +198,8 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior {
res = String.format("{ \"status\": \"%s\", \"target\": \"%s\"}", TopologyNode.Status.FAILURE, key);
}
- synchronized (runningResCheck) {
- resources.put(key, res);
- runningResCheck.remove(key);
- }
+ resources.put(key, res);
+ runningResCheck.remove(key);
} finally {
ThreadContext.detach();
}