[ 
https://issues.apache.org/jira/browse/HDDS-16353?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18109982#comment-18109982
 ] 

Tsz-wo Sze commented on HDDS-16353:
-----------------------------------

> Would it make sense to keep the existing equals() semantics and update 
> hashCode() to use nodeStatus.keySet()  ...

For hashCode(), let's just use the id.

BTW, let's also get rid of EqualsBuilder and HashCodeBuilder.

!screenshot-1.png|width=600!

> Pipeline violates the equals and hashCode contract
> --------------------------------------------------
>
>                 Key: HDDS-16353
>                 URL: https://issues.apache.org/jira/browse/HDDS-16353
>             Project: Apache Ozone
>          Issue Type: Bug
>          Components: common
>            Reporter: Tsz-wo Sze
>            Priority: Major
>         Attachments: screenshot-1.png
>
>
> {code}
> //Pipeline.java
>   @Override
>   public boolean equals(Object o) {
>     if (this == o) {
>       return true;
>     }
>     if (o == null || getClass() != o.getClass()) {
>       return false;
>     }
>     Pipeline that = (Pipeline) o;
>     return new EqualsBuilder()
>         .append(id, that.id)
>         .append(replicationConfig, that.replicationConfig)
>         .append(nodeStatus.keySet(), that.nodeStatus.keySet())
>         .isEquals();
>   }
>   @Override
>   public int hashCode() {
>     return new HashCodeBuilder()
>         .append(id)
>         .append(replicationConfig.getReplicationType())
>         .append(nodeStatus)
>         .toHashCode();
>   }
> {code}
> In the code above, hashCode() depends on nodeStatus but equals(..) depends 
> only on nodeStatus.keySet().  When two pipelines p1 and p2 have the same 
> nodeStatus.keySet() but different values, 
> - p1.equals(p2) returns true
> - but p1.hashCode() != p2.hashCode()
> It violates [the contract of 
> hashCode|https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--]:
> bq. If two objects are equal according to the equals(Object) method, then 
> calling the hashCode method on each of the two objects must produce the same 
> integer result. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to