[ 
https://issues.apache.org/jira/browse/PARQUET-1191?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Zoltan Ivanfi updated PARQUET-1191:
-----------------------------------
    Description: 
Taking originalType into account in Type.hashCode() but ignoring it in 
Type.equals() is inconsistent and violates hashCode-equals contract.

If two Type instances that are equal according to equals() but have different 
logical types were ever put in a hash map, then both of the following cases are 
possible:

* The two instances may accidentally have the same hash, which is consistent 
with the equals() method but is pure coincidence and has a very low 
probablility.
* The two instances may have different hashes and end up in different buckets 
of a hash map, leading to a situation where we can't find a value in the hash 
map despite that it's equals() would return true.

  was:


If two Type instances are equal according to equals() but have different 
logical types, then both of the following cases are possible:

* The two instances may accidentally have the same hash, which is consistent 
with the equals() method but is pure coincidence and has a very low 
probablility.
* The two instances may have different hashes and end up in different buckets 
of a hash map, leading to a situation where we can't find a value in the hash 
map despite that it's equals() would return true.


> Type.hashCode() takes originalType into account but Type.equals() does not
> --------------------------------------------------------------------------
>
>                 Key: PARQUET-1191
>                 URL: https://issues.apache.org/jira/browse/PARQUET-1191
>             Project: Parquet
>          Issue Type: Bug
>            Reporter: Gabor Szadovszky
>
> Taking originalType into account in Type.hashCode() but ignoring it in 
> Type.equals() is inconsistent and violates hashCode-equals contract.
> If two Type instances that are equal according to equals() but have different 
> logical types were ever put in a hash map, then both of the following cases 
> are possible:
> * The two instances may accidentally have the same hash, which is consistent 
> with the equals() method but is pure coincidence and has a very low 
> probablility.
> * The two instances may have different hashes and end up in different buckets 
> of a hash map, leading to a situation where we can't find a value in the hash 
> map despite that it's equals() would return true.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to