From b8d942e777eb53d2fe10b69a4d09dd8aa877d381 Mon Sep 17 00:00:00 2001 From: longqiang02 Date: Fri, 16 Jun 2023 17:29:59 +0800 Subject: [PATCH 1/2] Remove listeners from the equals and hashcode methods of ServiceInstancesChangedListener --- .../listener/ServiceInstancesChangedListener.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java index e069ead88c1..ce1ee35cf9a 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java @@ -65,8 +65,6 @@ import static org.apache.dubbo.metadata.RevisionResolver.EMPTY_REVISION; import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.getExportedServicesRevision; -; - /** * TODO, refactor to move revision-metadata mapping to ServiceDiscovery. Instances should have already been mapped with metadata when reached here. *

@@ -209,11 +207,7 @@ private synchronized void doOnEvent(ServiceInstancesChangedEvent event) { Map, Object>> portToRevisions = protocolRevisionsToUrls.computeIfAbsent(serviceInfo.getProtocol(), k -> new HashMap<>()); Map, Object> revisionsToUrls = portToRevisions.computeIfAbsent(serviceInfo.getPort(), k -> new HashMap<>()); - Object urls = revisionsToUrls.get(revisions); - if (urls == null) { - urls = getServiceUrlsCache(revisionToInstances, revisions, serviceInfo.getProtocol(), serviceInfo.getPort()); - revisionsToUrls.put(revisions, urls); - } + Object urls = revisionsToUrls.computeIfAbsent(revisions, k -> getServiceUrlsCache(revisionToInstances, revisions, serviceInfo.getProtocol(), serviceInfo.getPort())); List list = newServiceUrls.computeIfAbsent(serviceInfo.getPath(), k -> new LinkedList<>()); list.add(new ProtocolServiceKeyWithUrls(serviceInfo.getProtocolServiceKey(), (List) urls)); @@ -255,7 +249,7 @@ public synchronized void removeListener(String serviceKey, NotifyListener notify notifyListeners.removeIf(listener -> listener.getNotifyListener().equals(notifyListener)); // ServiceKey has no listener, remove set - if (notifyListeners.size() == 0) { + if (notifyListeners.isEmpty()) { this.listeners.remove(serviceKey); } } @@ -473,12 +467,12 @@ public boolean equals(Object o) { return false; } ServiceInstancesChangedListener that = (ServiceInstancesChangedListener) o; - return Objects.equals(getServiceNames(), that.getServiceNames()) && Objects.equals(listeners, that.listeners); + return Objects.equals(getServiceNames(), that.getServiceNames()); } @Override public int hashCode() { - return Objects.hash(getClass(), getServiceNames(), listeners); + return Objects.hash(getClass(), getServiceNames()); } protected class AddressRefreshRetryTask implements Runnable { From 824b68174be21623b55a578c455a9661fee6412d Mon Sep 17 00:00:00 2001 From: longqiang02 Date: Mon, 26 Jun 2023 10:51:15 +0800 Subject: [PATCH 2/2] equals retain listeners --- .../client/event/listener/ServiceInstancesChangedListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java index ce1ee35cf9a..8daf825df8f 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java @@ -467,7 +467,7 @@ public boolean equals(Object o) { return false; } ServiceInstancesChangedListener that = (ServiceInstancesChangedListener) o; - return Objects.equals(getServiceNames(), that.getServiceNames()); + return Objects.equals(getServiceNames(), that.getServiceNames()) && Objects.equals(listeners, that.listeners); } @Override