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

Ivan Andika commented on HDDS-16353:
------------------------------------

I think these violation of contracts should be able to be detected by static 
analysis or unit tests tool. Pipeline object has been around for a long time.

Found [https://github.com/jqno/equalsverifier] , we can explore other 
alternatives as well.

> 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
>            Assignee: Chia-Chuan Ho
>            Priority: Major
>              Labels: pull-request-available
>         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