[ 
https://issues.apache.org/jira/browse/HADOOP-9124?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13562961#comment-13562961
 ] 

Surenkumar Nihalani commented on HADOOP-9124:
---------------------------------------------

I was looking at the {{equals(Object o)}} implementation of {{AbstractMap}} 
here. It iterates through and checks if each Key and Value mapping is in the 
map to checked.
Now, each Key and Value would rely on instanceof to check if the class is 
there. So, I believe we should be good.

I was looking at {{AbstractMapWritable}}, the class id is just an auto 
incremented byte. So, different {{*MapWritables}} have added {{Writables}} in 
different order won't lead to same class-id mappings. Also, After a mapping is 
removed, there is no reference counting to remove the class-id mapping that is 
no longer needed. Hence, we should not check {{classToIdMap}} & {{idToClassMap}}

Let me know if I missed any edge case or anything.
                
> SortedMapWritable violates contract of Map interface for equals() and 
> hashCode()
> --------------------------------------------------------------------------------
>
>                 Key: HADOOP-9124
>                 URL: https://issues.apache.org/jira/browse/HADOOP-9124
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: io
>    Affects Versions: 2.0.2-alpha
>            Reporter: Patrick Hunt
>            Priority: Minor
>         Attachments: HADOOP-9124.patch, HADOOP-9124.patch, HADOOP-9124.patch, 
> HADOOP-9124.patch, HADOOP-9124.patch, HADOOP-9124.patch
>
>
> This issue is similar to HADOOP-7153. It was found when using MRUnit - see 
> MRUNIT-158, specifically 
> https://issues.apache.org/jira/browse/MRUNIT-158?focusedCommentId=13501985&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13501985
> --
> o.a.h.io.SortedMapWritable 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 SortedMapWritables 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.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to