JobID.forName() creates JobID instances that break equality
-----------------------------------------------------------

                 Key: MAPREDUCE-1842
                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-1842
             Project: Hadoop Map/Reduce
          Issue Type: Bug
          Components: job submission
    Affects Versions: 0.20.2
            Reporter: Age Mooij


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

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to