You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by am...@apache.org on 2026/04/29 16:34:39 UTC
(aries-rsa) 01/03: Simplify zookeeper Interest/InterestManager
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 084ab478aa52f71f970b18945b6690190feb9f04
Author: Amichai Rothman <am...@apache.org>
AuthorDate: Thu Mar 19 00:40:47 2026 +0200
Simplify zookeeper Interest/InterestManager
---
.../aries/rsa/discovery/zookeeper/Interest.java | 59 ++++------------------
.../rsa/discovery/zookeeper/InterestManager.java | 50 ++++++++----------
.../discovery/zookeeper/InterestManagerTest.java | 2 +-
3 files changed, 31 insertions(+), 80 deletions(-)
diff --git a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/Interest.java b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/Interest.java
index 4f539f9d..da659d59 100644
--- a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/Interest.java
+++ b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/Interest.java
@@ -21,8 +21,6 @@ package org.apache.aries.rsa.discovery.zookeeper;
import static org.osgi.service.remoteserviceadmin.EndpointEventListener.ENDPOINT_LISTENER_SCOPE;
import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
import org.apache.aries.rsa.util.StringPlus;
import org.osgi.framework.ServiceReference;
@@ -32,67 +30,28 @@ import org.osgi.service.remoteserviceadmin.EndpointEventListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@SuppressWarnings("deprecation")
public class Interest {
private static final Logger LOG = LoggerFactory.getLogger(Interest.class);
- private final ServiceReference<?> sref;
private final List<String> scopes;
- private final EndpointEventListener epListener;
+ private final EndpointEventListener listener;
- public Interest(ServiceReference<?> sref) {
- this(sref, null);
- }
-
- public Interest(ServiceReference<?> sref, EndpointEventListener epListener) {
- this.sref = sref;
+ public Interest(ServiceReference<?> sref, EndpointEventListener listener) {
this.scopes = StringPlus.normalize(sref.getProperty(ENDPOINT_LISTENER_SCOPE));
- this.epListener = epListener;
- }
-
- public List<String> getScopes() {
- return scopes;
+ this.listener = listener;
}
public void notifyListener(EndpointEvent event) {
EndpointDescription endpoint = event.getEndpoint();
- Optional<String> currentScope = getFirstMatch(endpoint);
- if (currentScope.isPresent()) {
- LOG.debug("Matched {} against {}", endpoint, currentScope);
- String scope = currentScope.get();
- LOG.info("Calling endpointchanged on class {} for filter {}, type {}, endpoint {} ",
- epListener, scope, event.getType(), endpoint);
- epListener.endpointChanged(event, scope);
- }
- }
-
- private Optional<String> getFirstMatch(EndpointDescription endpoint) {
- return scopes.stream().filter(endpoint::matches).findFirst();
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((sref == null) ? 0 : sref.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- Interest other = (Interest) obj;
- return Objects.equals(sref, other.sref);
+ scopes.stream().filter(endpoint::matches).findFirst().ifPresent(scope -> { // notify with first scope
+ LOG.info("Calling endpointChanged on {} for filter {}, type {}, endpoint {}",
+ listener, scope, event.getType(), endpoint);
+ listener.endpointChanged(event, scope);
+ });
}
@Override
public String toString() {
- return "Interest [scopes=" + scopes + ", epListener=" + epListener.getClass() + "]";
+ return "Interest [scopes=" + scopes + ", listener=" + listener.getClass() + "]";
}
-
}
diff --git a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/InterestManager.java b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/InterestManager.java
index d223782f..f8812612 100644
--- a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/InterestManager.java
+++ b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/InterestManager.java
@@ -18,7 +18,7 @@
*/
package org.apache.aries.rsa.discovery.zookeeper;
-import java.util.Set;
+import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.aries.rsa.discovery.zookeeper.client.ClientManager;
@@ -40,14 +40,13 @@ import org.slf4j.LoggerFactory;
* Establishes a listener with the {@link ZookeeperEndpointRepository} to be called back on all changes in the repository.
* Events from repository are then forwarded to all interested {@link EndpointEventListener}s.
*/
-@SuppressWarnings("deprecation")
@Component(immediate = true)
public class InterestManager {
private static final Logger LOG = LoggerFactory.getLogger(InterestManager.class);
- private Set<Interest> interests = ConcurrentHashMap.newKeySet();
+ private final Map<ServiceReference<EndpointEventListener>, Interest> interests = new ConcurrentHashMap<>();
- private ZookeeperEndpointListener listener;
+ private ZookeeperEndpointListener zkListener;
public InterestManager() {
}
@@ -55,59 +54,52 @@ public class InterestManager {
// Using ARepository name to make sure it is injected first
@Reference
public void bindARepository(ZookeeperEndpointRepository repository) {
- this.listener = repository.createListener(this::onEndpointEvent);
+ zkListener = repository.createListener(this::onEndpointEvent);
}
@Deactivate
public void deactivate() {
- this.listener.close();
+ zkListener.close();
interests.clear();
}
private void onEndpointEvent(EndpointEvent event) {
- interests.forEach(interest -> interest.notifyListener(event));
+ interests.values().forEach(interest -> interest.notifyListener(event));
}
@Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
- public void bindEndpointEventListener(ServiceReference<EndpointEventListener> sref, EndpointEventListener epListener) {
- addInterest(sref, epListener);
+ public void bindEndpointEventListener(ServiceReference<EndpointEventListener> sref, EndpointEventListener listener) {
+ addInterest(sref, listener);
}
- public void updatedEndpointEventListener(ServiceReference<EndpointEventListener> sref, EndpointEventListener epListener) {
- addInterest(sref, epListener);
+ public void updatedEndpointEventListener(ServiceReference<EndpointEventListener> sref, EndpointEventListener listener) {
+ addInterest(sref, listener);
}
public void unbindEndpointEventListener(ServiceReference<EndpointEventListener> sref) {
- interests.remove(new Interest(sref));
+ interests.remove(sref);
}
- private void addInterest(ServiceReference<?> sref, EndpointEventListener epListener) {
+ private void addInterest(ServiceReference<EndpointEventListener> sref, EndpointEventListener listener) {
if (isOurOwnEndpointEventListener(sref)) {
LOG.debug("Skipping our own EndpointEventListener");
return;
}
- Interest interest = new Interest(sref, epListener);
- update(interest);
- if (listener != null) {
- listener.getEndpoints().stream()
+ Interest interest = new Interest(sref, listener);
+ boolean exists = interests.put(sref, interest) != null;
+ LOG.debug("{} Interest: {}", exists ? "Updating" : "Adding", interest);
+ if (zkListener != null) {
+ zkListener.getEndpoints().stream()
.map(endpoint -> new EndpointEvent(EndpointEvent.ADDED, endpoint))
.forEach(interest::notifyListener);
}
}
- private void update(Interest interest) {
- boolean present = interests.remove(interest);
- LOG.debug("{} Interest: {}", present ? "Adding" : "Updating", interest);
- interests.add(interest);
+ private static boolean isOurOwnEndpointEventListener(ServiceReference<EndpointEventListener> sref) {
+ return Boolean.parseBoolean(String.valueOf(sref.getProperty(ClientManager.DISCOVERY_ZOOKEEPER_ID)));
}
- private static boolean isOurOwnEndpointEventListener(ServiceReference<?> endpointEventListener) {
- return Boolean.parseBoolean(String.valueOf(
- endpointEventListener.getProperty(ClientManager.DISCOVERY_ZOOKEEPER_ID)));
+ int size() {
+ return interests.size();
}
-
- Set<Interest> getInterests() {
- return interests;
- }
-
}
diff --git a/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/InterestManagerTest.java b/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/InterestManagerTest.java
index 63fddbd4..793bb35d 100644
--- a/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/InterestManagerTest.java
+++ b/discovery/zookeeper/src/test/java/org/apache/aries/rsa/discovery/zookeeper/InterestManagerTest.java
@@ -81,7 +81,7 @@ public class InterestManagerTest {
}
private void assertNumInterests(int expectedNum) {
- assertEquals(expectedNum, im.getInterests().size());
+ assertEquals(expectedNum, im.size());
}
@SuppressWarnings("unchecked")