This is an automated email from the ASF dual-hosted git repository. amichai pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/aries-rsa.git
commit 291b2c04c6811417d0813154f1c9998d74ebb6b8 Author: Amichai Rothman <[email protected]> AuthorDate: Tue Mar 17 16:23:02 2026 +0200 Add MultiMap.replace method --- .../apache/aries/rsa/topologymanager/importer/MultiMap.java | 11 +++++++++-- .../rsa/topologymanager/importer/TopologyManagerImport.java | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) 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 e6b47f8d..69d28428 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 @@ -34,18 +34,25 @@ import java.util.stream.Collectors; */ public class MultiMap<K, V> { - private Map<K, Set<V>> map; + private final Map<K, Set<V>> map; public MultiMap() { map = new ConcurrentHashMap<>(); } public void put(K key, V value) { + replace(key, null, value); + } + + public void replace(K key, V oldValue, V newValue) { map.compute(key, (k, v) -> { if (v == null) { v = new CopyOnWriteArraySet<>(); } - v.add(value); + if (oldValue != null) { + v.remove(oldValue); + } + v.add(newValue); return v; }); } 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 247d334c..3f5de4a4 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 @@ -200,8 +200,8 @@ public class TopologyManagerImport implements EndpointEventListener, RemoteServi importPossibilities.remove(filter, endpoint); break; case EndpointEvent.MODIFIED: - importPossibilities.remove(filter, endpoint); - importPossibilities.put(filter, endpoint); + // new endpoint has same endpoint.id and equals old endpoint, but has updated properties + importPossibilities.replace(filter, endpoint, endpoint); break; } synchronizeImportsAsync(filter);
