Uploaded image for project: 'Hadoop Map/Reduce'
  1. Hadoop Map/Reduce
  2. MAPREDUCE-1842

JobID.forName() creates JobID instances that break equality

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 0.20.2
    • None
    • job submission
    • None

    Description

      We have some code that uses serialization to store org.apache.hadoop.mapreduce.JobID instances (among other things). Since org.apache.hadoop.mapreduce.JobID is not serializable, we store the String representation and use org.apache.hadoop.mapreduce.JobID.forName(String) to read it back.

      Unfortunately the instance created by that method is not equal to the same id as created by the constructor. Here's a unit test for the problem:

      @Test
      public void forNameCopyShouldProduceInstanceEqualToOriginal() {
      JobID jobId1 = new JobID("original", 1);
      JobID jobId2 = JobID.forName(jobId1.toString());

      assertEquals(jobId1, jobId2);
      }

      forName(String) produces a backwards compatible instance from the old mapred package but the equals method shared by them both uses this.getClass() == that.getClass() and that causes the incompatible instances.

      I know this backwards compatible stuff is important but could you please fix this ? The simplest fix would be to change the implementation of equals() or override it in the backwards compatibillity version of JobID in the old mapred package

      Attachments

        Activity

          People

            Unassigned Unassigned
            agemooij Age Mooij
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated: