Copilot commented on code in PR #15633:
URL: https://github.com/apache/dubbo/pull/15633#discussion_r2278143954


##########
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java:
##########
@@ -305,21 +308,43 @@ public boolean equals(Object o) {
             return false;
         }
         DefaultServiceInstance that = (DefaultServiceInstance) o;
-        boolean equals = Objects.equals(getServiceName(), 
that.getServiceName())
-                && Objects.equals(getHost(), that.getHost())
-                && Objects.equals(getPort(), that.getPort());
+        if (!Objects.equals(getServiceName(), that.getServiceName())
+                || !Objects.equals(getHost(), that.getHost())
+                || !Objects.equals(getPort(), that.getPort())) {
+            return false;
+        }
+
+        Set<String> checkedKeys = new HashSet<>(this.getMetadata().size());
         for (Map.Entry<String, String> entry : this.getMetadata().entrySet()) {
-            if 
(entry.getKey().equals(EXPORTED_SERVICES_REVISION_PROPERTY_NAME)) {
+            String key = entry.getKey();
+            checkedKeys.add(key);
+            if (key.equals(EXPORTED_SERVICES_REVISION_PROPERTY_NAME) || 
key.equals(TIMESTAMP_KEY)) {
                 continue;
             }
             if (entry.getValue() == null) {
-                equals = equals && (entry.getValue() == 
that.getMetadata().get(entry.getKey()));
+                if (null != that.getMetadata().get(key)) {
+                    return false;
+                }
             } else {
-                equals = equals && 
entry.getValue().equals(that.getMetadata().get(entry.getKey()));
+                if (!entry.getValue().equals(that.getMetadata().get(key))) {
+                    return false;
+                }
+            }
+        }
+
+        for (Map.Entry<String, String> thatEntry : 
that.getMetadata().entrySet()) {
+            String thatKey = thatEntry.getKey();
+            if (checkedKeys.contains(thatKey)
+                    || thatKey.equals(EXPORTED_SERVICES_REVISION_PROPERTY_NAME)
+                    || thatKey.equals(TIMESTAMP_KEY)) {
+                continue;
+            }
+            if (null != thatEntry.getValue()) {

Review Comment:
   The logic appears incorrect. This condition returns false when the other 
instance has a non-null value for a key that wasn't checked, but it should also 
check if this instance has a null value for the same key. The comparison should 
be symmetric.



##########
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java:
##########
@@ -305,21 +308,43 @@ public boolean equals(Object o) {
             return false;
         }
         DefaultServiceInstance that = (DefaultServiceInstance) o;
-        boolean equals = Objects.equals(getServiceName(), 
that.getServiceName())
-                && Objects.equals(getHost(), that.getHost())
-                && Objects.equals(getPort(), that.getPort());
+        if (!Objects.equals(getServiceName(), that.getServiceName())
+                || !Objects.equals(getHost(), that.getHost())
+                || !Objects.equals(getPort(), that.getPort())) {
+            return false;
+        }
+
+        Set<String> checkedKeys = new HashSet<>(this.getMetadata().size());

Review Comment:
   The HashSet is initialized with the size of metadata, but only keys that are 
not skipped will be added. Consider initializing without a specific size or 
using a more accurate estimate to avoid potential memory waste.
   ```suggestion
           Set<String> checkedKeys = new HashSet<>();
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@dubbo.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@dubbo.apache.org
For additional commands, e-mail: notifications-h...@dubbo.apache.org

Reply via email to