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();
             }