You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2018/01/30 13:29:32 UTC

aries-rsa git commit: [ARIES-1763] Fixes for shutdown

Repository: aries-rsa
Updated Branches:
  refs/heads/master ee64f9f43 -> 2693bb8ff


[ARIES-1763] Fixes for shutdown


Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/2693bb8f
Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/2693bb8f
Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/2693bb8f

Branch: refs/heads/master
Commit: 2693bb8ffcf0958c459bf46e9bb54f12ca80328b
Parents: ee64f9f
Author: Christian Schneider <cs...@adobe.com>
Authored: Tue Jan 30 14:29:26 2018 +0100
Committer: Christian Schneider <cs...@adobe.com>
Committed: Tue Jan 30 14:29:26 2018 +0100

----------------------------------------------------------------------
 .../rsa/topologymanager/importer/MultiMap.java  |  4 +++
 .../importer/TopologyManagerImport.java         | 15 +++++++++-
 .../importer/local/EndpointListenerManager.java | 29 ++++++++++++++------
 .../importer/TopologyManagerImportTest.java     |  2 ++
 4 files changed, 40 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/2693bb8f/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/MultiMap.java
----------------------------------------------------------------------
diff --git a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/MultiMap.java b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/MultiMap.java
index 13597b5..e1cc190 100644
--- a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/MultiMap.java
+++ b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/MultiMap.java
@@ -66,4 +66,8 @@ public class MultiMap<T> {
             remove(key, toRemove);
         }
     }
+
+    public void clear() {
+        map.clear();
+    }
 }

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/2693bb8f/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
----------------------------------------------------------------------
diff --git a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
index 8e1a1b7..5129223 100644
--- a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
+++ b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImport.java
@@ -51,7 +51,7 @@ public class TopologyManagerImport implements EndpointEventListener, RemoteServi
 
     private final BundleContext bctx;
     private Set<RemoteServiceAdmin> rsaSet;
-
+    private boolean stopped;
 
     /**
      * List of Endpoints by matched filter that were reported by the EndpointListener and can be imported
@@ -72,11 +72,21 @@ public class TopologyManagerImport implements EndpointEventListener, RemoteServi
     }
     
     public void start() {
+        stopped = false;
         bctx.registerService(RemoteServiceAdminListener.class, this, null);
     }
 
     public void stop() {
+        stopped = true;
         execService.shutdown();
+        closeAllImports();
+    }
+
+    private void closeAllImports() {
+        importPossibilities.clear();
+        for (String filter : importedServices.keySet()) {
+            unImportForGoneEndpoints(filter);
+        }
     }
 
     public void add(RemoteServiceAdmin rsa) {
@@ -196,6 +206,9 @@ public class TopologyManagerImport implements EndpointEventListener, RemoteServi
 
     @Override
     public void endpointChanged(EndpointEvent event, String filter) {
+        if (stopped) {
+            return;
+        }
         EndpointDescription endpoint = event.getEndpoint();
         LOG.debug("Endpoint event received type {}, filter {}, endpoint {}", event.getType(), filter, endpoint);
         switch (event.getType()) {

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/2693bb8f/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java
----------------------------------------------------------------------
diff --git a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java
index 0731aab..a14394c 100644
--- a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java
+++ b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/local/EndpointListenerManager.java
@@ -85,9 +85,9 @@ public class EndpointListenerManager implements ServiceInterestListener{
     public void start() {
         EndpointListener endpointListenerAdapter = new EndpointListenerAdapter();
         serviceRegistration = bctx.registerService(EndpointListener.class, endpointListenerAdapter,
-                                                   getRegistrationProperties());
+                                                   getELProperties());
         serviceRegistration2 = bctx.registerService(EndpointEventListener.class, endpointListener,
-                getRegistrationProperties());
+                getEELProperties());
 
         bctx.registerService(ListenerHook.class, listenerHook, null);
         bctx.registerService(FindHook.class, findHook, null);
@@ -124,21 +124,32 @@ public class EndpointListenerManager implements ServiceInterestListener{
         updateRegistration();
     }
 
-    private Dictionary<String, Object> getRegistrationProperties() {
+    private Dictionary<String, Object> getELProperties() {
         Dictionary<String, Object> p = new Hashtable<String, Object>();
-
+        p.put(EndpointListener.ENDPOINT_LISTENER_SCOPE, copyFilters());
+        return p;
+    }
+    
+    private Dictionary<String, Object> getEELProperties() {
+        Dictionary<String, Object> p = new Hashtable<String, Object>();
+        p.put(EndpointEventListener.ENDPOINT_LISTENER_SCOPE, copyFilters());
+        return p;
+    }
+    
+    public List<String> copyFilters() {
         synchronized (filters) {
-            LOG.debug("Current filter: {}", filters);
-            p.put(EndpointListener.ENDPOINT_LISTENER_SCOPE, new ArrayList<String>(filters));
+            return new ArrayList<>(filters);
         }
-
-        return p;
     }
 
     private void updateRegistration() {
         if (serviceRegistration != null) {
-            serviceRegistration.setProperties(getRegistrationProperties());
+            serviceRegistration.setProperties(getELProperties());
         }
+        if (serviceRegistration2 != null) {
+            serviceRegistration2.setProperties(getEELProperties());
+        }
+
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/2693bb8f/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
----------------------------------------------------------------------
diff --git a/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java b/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
index 32ba737..b5b8759 100644
--- a/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
+++ b/topology-manager/src/test/java/org/apache/aries/rsa/topologymanager/importer/TopologyManagerImportTest.java
@@ -54,6 +54,8 @@ public class TopologyManagerImportTest {
                 return ir;
             }
         }).once();
+        ir.close();
+        EasyMock.expectLastCall();
         c.replay();
 
         TopologyManagerImport tm = new TopologyManagerImport(bc);