Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
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.
We should decide whether originalType is needed for an equality check or not. If it is, then it should be added to equals(). Otherwise it should be removed from hashCode().
Attachments
Issue Links
- relates to
-
HIVE-18554 Fix false positive test ql.io.parquet.TestHiveSchemaConverter.testMap
- Closed
- links to