Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-3836

The hash codes of RelNodes are unreliable

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Not A Problem
    • None
    • None
    • core

    Description

      For all sub-classes of AbstractRelNode, the hashCode methods depend on AbstractRelNode#hashCode, because it is declared as final.

      AbstractRelNode#hashCode depends on Object#hashCode, which is called identify hash code. The details of identity hash code depends on the specific JVM implementation. For many JVMs, the implementation is based on the object address in the memory. The problem is that, the address of an object may change in a JVM, due to GC, memory contraction, etc. So the hash code of an object may change, even if the content of the object is not changed (This can be confirmed from the JavaDoc of Object#hashCode).

      This problem may cause severe issues that are hard to diagnose and debug, like an object is in the hash table, but cannot be retrieved; duplicate objects in the hash map, etc.

      To solve the problem, we compute a hash code solely from the node id. This is consistent with the previous semantics, and solves the above problem.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              fan_li_ya Liya Fan
              Votes:
              0 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 1.5h
                  1.5h