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

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

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 0.21.0
    • 0.23.0
    • io
    • None
    • Incompatible change, Reviewed
    • 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-test.diff
          1.0 kB
          Nicholas Telford
        2. 7153-mapwritable-equality.diff
          0.9 kB
          Nicholas Telford
        3. 7153-mapwritable-equality.combined.diff
          2 kB
          Nicholas Telford

        Issue Links

          Activity

            People

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

              Dates

                Created:
                Updated:
                Resolved: