Uploaded image for project: 'Hadoop Common'
  1. Hadoop Common
  2. HADOOP-7153

MapWritable violates contract of Map interface for equals() and hashCode()

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 0.21.0
    • Fix Version/s: 0.23.0
    • Component/s: io
    • Labels:
      None
    • Hadoop Flags:
      Incompatible change, Reviewed
    • Release Note:
      MapWritable now implements equals() and hashCode() based on the map contents rather than object identity in order to correctly implement the Map interface.

      Description

      o.a.h.io.MapWritable implements the java.util.Map interface, however it does not define an implementation of the equals() or hashCode() methods; instead the default implementations in java.lang.Object are used.

      This violates the contract of the Map interface which defines different behaviour for equals() and hashCode() than Object does. More information here: http://download.oracle.com/javase/6/docs/api/java/util/Map.html#equals(java.lang.Object)

      The practical consequence is that MapWritables containing equal entries cannot be compared properly. We were bitten by this when trying to write an MRUnit test for a Mapper that outputs MapWritables; the MRUnit driver cannot test the equality of the expected and actual MapWritable objects.

        Attachments

        1. 7153-mapwritable-equality.combined.diff
          2 kB
          Nicholas Telford
        2. 7153-mapwritable-equality-test.diff
          1.0 kB
          Nicholas Telford
        3. 7153-mapwritable-equality.diff
          0.9 kB
          Nicholas Telford

          Issue Links

            Activity

              People

              • Assignee:
                nicktelford Nicholas Telford
                Reporter:
                nicktelford Nicholas Telford
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: