[
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]