This is an automated email from the ASF dual-hosted git repository. amichair pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/aries-rsa.git
commit 61ea7c40836dbeeeb32ecb6977a8ecfee32c1d6d Author: Amichai Rothman <[email protected]> AuthorDate: Thu Jun 4 22:45:14 2026 +0300 ARIES-2233 Extract duplicate getChangedKeys utility method --- .../client/ZookeeperEndpointListener.java | 22 +++---------------- .../org/apache/aries/rsa/util/CollectionUtils.java | 25 ++++++++++++++++++++++ .../importer/TopologyManagerImport.java | 19 +++------------- 3 files changed, 31 insertions(+), 35 deletions(-) diff --git a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/client/ZookeeperEndpointListener.java b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/client/ZookeeperEndpointListener.java index f137112d..81aedf0a 100644 --- a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/client/ZookeeperEndpointListener.java +++ b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/client/ZookeeperEndpointListener.java @@ -21,11 +21,8 @@ package org.apache.aries.rsa.discovery.zookeeper.client; import java.io.ByteArrayInputStream; import java.io.Closeable; import java.util.Collection; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Objects; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; @@ -42,6 +39,8 @@ import org.osgi.service.remoteserviceadmin.EndpointEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.apache.aries.rsa.util.CollectionUtils.getChangedKeys; + /** * Listens to endpoint changes in Zookeeper and forwards changes in Endpoints to InterestManager. */ @@ -116,7 +115,7 @@ public class ZookeeperEndpointListener implements Closeable { private void onChanged(String path, EndpointDescription endpoint) { EndpointDescription old = endpoints.put(path, endpoint); - if (old != null && getChangedProps(old.getProperties(), endpoint.getProperties()).isEmpty()) { + if (old != null && getChangedKeys(old.getProperties(), endpoint.getProperties()).isEmpty()) { LOG.trace("ignoring endpoint that hasn't changed: {}", endpoint); return; } @@ -142,19 +141,4 @@ public class ZookeeperEndpointListener implements Closeable { return parser.readEndpoint(new ByteArrayInputStream(data)); } } - - private static Set<String> getChangedProps(Map<String, Object> p1, Map<String, Object> p2) { - Set<String> changed = new LinkedHashSet<>(); - for (Map.Entry<String, Object> entry : p1.entrySet()) { - Object v = p2.get(entry.getKey()); - if (!Objects.deepEquals(entry.getValue(), v) || v == null && !p2.containsKey(entry.getKey())) - changed.add(entry.getKey()); - } - for (String k : p2.keySet()) { - if (!p1.containsKey(k)) - changed.add(k); - } - return changed; - } - } diff --git a/spi/src/main/java/org/apache/aries/rsa/util/CollectionUtils.java b/spi/src/main/java/org/apache/aries/rsa/util/CollectionUtils.java index 91e43cb6..28645a1d 100644 --- a/spi/src/main/java/org/apache/aries/rsa/util/CollectionUtils.java +++ b/spi/src/main/java/org/apache/aries/rsa/util/CollectionUtils.java @@ -20,6 +20,9 @@ package org.apache.aries.rsa.util; import java.util.Collection; import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Objects; import java.util.Set; /** @@ -45,4 +48,26 @@ public class CollectionUtils { union.addAll(c); return union; } + + /** + * Returns the set of keys whose entries have changed between two maps + * (added, removed, or changed value). + * + * @param p1 the first map + * @param p2 the second map + * @return the set of changed keys + */ + public static Set<String> getChangedKeys(Map<String, Object> p1, Map<String, Object> p2) { + Set<String> changed = new LinkedHashSet<>(); + for (Map.Entry<String, Object> entry : p1.entrySet()) { + Object v = p2.get(entry.getKey()); + if (!Objects.deepEquals(entry.getValue(), v) || v == null && !p2.containsKey(entry.getKey())) + changed.add(entry.getKey()); + } + for (String k : p2.keySet()) { + if (!p1.containsKey(k)) + changed.add(k); + } + return changed; + } } 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 42b6523f..678241dc 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 @@ -23,7 +23,6 @@ import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.Executors; @@ -44,6 +43,8 @@ import org.osgi.service.remoteserviceadmin.RemoteServiceAdminListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.apache.aries.rsa.util.CollectionUtils.getChangedKeys; + /** * Listens for remote endpoints using the EndpointListener. The scope of this listener is managed by * the EndpointListenerManager. @@ -158,7 +159,7 @@ public class TopologyManagerImport implements EndpointEventListener, RemoteServi // check if the currently imported endpoint is still valid and possible EndpointDescription pe = possible.get(endpoint); // get the new (maybe modified) possible endpoint if (pe != null) { - if (getChangedProps(endpoint.getProperties(), pe.getProperties()).isEmpty()) + if (getChangedKeys(endpoint.getProperties(), pe.getProperties()).isEmpty()) valid.add(endpoint); // valid and possible else updated.put(reg, pe); // valid and possible and changed properties @@ -213,20 +214,6 @@ public class TopologyManagerImport implements EndpointEventListener, RemoteServi reg.close(); } - private static Set<String> getChangedProps(Map<String, Object> p1, Map<String, Object> p2) { - Set<String> changed = new LinkedHashSet<>(); - for (Map.Entry<String, Object> entry : p1.entrySet()) { - Object v = p2.get(entry.getKey()); - if (!Objects.deepEquals(entry.getValue(), v) || v == null && !p2.containsKey(entry.getKey())) - changed.add(entry.getKey()); - } - for (String k : p2.keySet()) { - if (!p1.containsKey(k)) - changed.add(k); - } - return changed; - } - @Override public void endpointChanged(EndpointEvent event, String filter) { if (stopped) {
