This is an automated email from the ASF dual-hosted git repository.

szetszwo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new bf13abb3721 HDDS-16353. Pipeline violates the equals and hashCode 
contract (#11179)
bf13abb3721 is described below

commit bf13abb372111919e697fa39b1a8cd450e3b77ef
Author: Eric C. Ho <[email protected]>
AuthorDate: Tue Sep 1 18:39:10 2026 +0800

    HDDS-16353. Pipeline violates the equals and hashCode contract (#11179)
---
 .../org/apache/hadoop/hdds/scm/pipeline/Pipeline.java    | 16 ++++------------
 .../apache/hadoop/hdds/scm/pipeline/TestPipeline.java    | 12 ++++++++++++
 2 files changed, 16 insertions(+), 12 deletions(-)

diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/Pipeline.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/Pipeline.java
index 1379a9c52aa..f6065a578e2 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/Pipeline.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/Pipeline.java
@@ -36,8 +36,6 @@
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
 import org.apache.hadoop.hdds.client.ECReplicationConfig;
 import org.apache.hadoop.hdds.client.ReplicatedReplicationConfig;
 import org.apache.hadoop.hdds.client.ReplicationConfig;
@@ -519,20 +517,14 @@ public boolean equals(Object o) {
 
     Pipeline that = (Pipeline) o;
 
-    return new EqualsBuilder()
-        .append(id, that.id)
-        .append(replicationConfig, that.replicationConfig)
-        .append(nodeStatus.keySet(), that.nodeStatus.keySet())
-        .isEquals();
+    return id.equals(that.id)
+        && replicationConfig.equals(that.replicationConfig)
+        && nodeStatus.keySet().equals(that.nodeStatus.keySet());
   }
 
   @Override
   public int hashCode() {
-    return new HashCodeBuilder()
-        .append(id)
-        .append(replicationConfig.getReplicationType())
-        .append(nodeStatus)
-        .toHashCode();
+    return id.hashCode();
   }
 
   @Override
diff --git 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipeline.java
 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipeline.java
index c6ab6678e8b..ed823d1ae9f 100644
--- 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipeline.java
+++ 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipeline.java
@@ -147,4 +147,16 @@ void testCopyForReadFromNodeRejectsUnknownNode() {
     Pipeline subject = MockPipeline.createRatisPipeline();
     assertThrows(IllegalStateException.class, () -> 
subject.copyForReadFromNode(randomDatanodeDetails()));
   }
+
+  @Test
+  void testEqualsAndHashCodeIgnoreNodeStatusValues() throws IOException {
+    Pipeline pipeline = MockPipeline.createRatisPipeline();
+    Pipeline copy = pipeline.toBuilder().setNodes(pipeline.getNodes()).build();
+
+    pipeline.reportDatanode(pipeline.getNodes().get(0));
+
+    assertEquals(pipeline, copy);
+    assertEquals(pipeline.hashCode(), copy.hashCode());
+    assertEquals(pipeline.getId().hashCode(), pipeline.hashCode());
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to