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 2019/11/17 09:01:21 UTC

[aries-rsa] 01/01: ARIES-1944 - Make sure closed ImportRegistrations are removed

This is an automated email from the ASF dual-hosted git repository.

cschneider pushed a commit to branch ARIES-1944
in repository https://gitbox.apache.org/repos/asf/aries-rsa.git

commit 0e74b19854cc5bf0898df76afcd51a3ac5cc2e03
Author: Christian Schneider <cs...@adobe.com>
AuthorDate: Sun Nov 17 10:00:58 2019 +0100

    ARIES-1944 - Make sure closed ImportRegistrations are removed
---
 .../rsa/topologymanager/importer/ImportDiff.java   | 19 +++++++++++-----
 .../importer/TopologyManagerImport.java            | 25 +++++++++++-----------
 2 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/ImportDiff.java b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/ImportDiff.java
index 4f7dc72..468d235 100644
--- a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/ImportDiff.java
+++ b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/importer/ImportDiff.java
@@ -37,19 +37,28 @@ public class ImportDiff {
         this.imported = imported;
     }
 
-    public Stream<ImportReference> getRemoved() {
+    public Stream<ImportRegistration> getRemoved() {
         return imported.stream()
-                .map(ImportRegistration::getImportReference)
-                .filter(Objects::nonNull)
-                .filter(ir -> !possible.contains(ir.getImportedEndpoint()));
+                .filter(this::toRemove);
     }
-    
+
     public Stream<EndpointDescription> getAdded() {
         Set<EndpointDescription> importedEndpoints = importedEndpoints();
         return possible.stream()
                 .filter(not(importedEndpoints::contains));
     }
     
+    /**
+     * Checks if the import registration is not possible anymore or closed
+     * 
+     * @param ireg registration to check
+     * @return
+     */
+    private boolean toRemove(ImportRegistration ireg) {
+        ImportReference iref = ireg != null ? ireg.getImportReference() : null;
+        return iref == null || !possible.contains(iref.getImportedEndpoint()); 
+    }
+
     private Set<EndpointDescription> importedEndpoints() {
         return imported.stream()
             .map(ImportRegistration::getImportReference).filter(Objects::nonNull)
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 2543da9..5e4baf8 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
@@ -85,7 +85,7 @@ public class TopologyManagerImport implements EndpointEventListener, RemoteServi
         }
         // close all imports
         importPossibilities.clear();
-        importedServices.allValues().forEach(ir -> unimportService(ir.getImportReference()));
+        importedServices.allValues().forEach(this::unimportRegistration);
     }
 
     public void add(RemoteServiceAdmin rsa) {
@@ -99,8 +99,11 @@ public class TopologyManagerImport implements EndpointEventListener, RemoteServi
 
     @Override
     public void remoteAdminEvent(RemoteServiceAdminEvent event) {
-        if (event.getType() == RemoteServiceAdminEvent.IMPORT_UNREGISTRATION) {
-            unimportService(event.getImportReference());
+        ImportReference ref = event.getImportReference();
+        if (event.getType() == RemoteServiceAdminEvent.IMPORT_UNREGISTRATION && ref != null) {
+            importedServices.allValues().stream()
+                .filter(ir -> ref.equals(ir.getImportReference()))
+                .forEach(this::unimportRegistration);
         }
     }
 
@@ -125,7 +128,7 @@ public class TopologyManagerImport implements EndpointEventListener, RemoteServi
         try {
             ImportDiff diff = new ImportDiff(importPossibilities.get(filter), importedServices.get(filter));
             diff.getRemoved()
-                .forEach(this::unimportService);
+                .forEach(this::unimportRegistration);
             diff.getAdded()
                 .flatMap(this::importService)
                 .forEach(ir -> importedServices.put(filter, ir));
@@ -156,16 +159,12 @@ public class TopologyManagerImport implements EndpointEventListener, RemoteServi
         }
         return Stream.empty();
     }
-
-    private void unimportService(ImportReference ref) {
-        importedServices.allValues().stream()
-            .filter(ir -> ref != null && ref.equals(ir.getImportReference()))
-            .forEach(ir -> {
-                importedServices.remove(ir);
-                ir.close();
-            });
+    
+    private void unimportRegistration(ImportRegistration reg) {
+        importedServices.remove(reg);
+        reg.close();
     }
-
+    
     @Override
     public void endpointChanged(EndpointEvent event, String filter) {
         if (stopped) {