Uploaded image for project: 'Parquet'
  1. Parquet
  2. PARQUET-1191

Type.hashCode() takes originalType into account but Type.equals() does not

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.10.0
    • Component/s: None
    • Labels:
      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

            Activity

              People

              • Assignee:
                nkollar Nandor Kollar
                Reporter:
                gszadovszky Gabor Szadovszky
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: