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

Robert Kanter commented on MAPREDUCE-5530:
------------------------------------------

Tell me if I'm understanding 2 correctly: If the subclass implements 
{{isSplitable(FileSystem fs, Path file)}}, then the user is expecting that it 
will actually be used by other methods, such as {{getSplits()}}; except that it 
won't be, because they're using {{isSplittable(JobContext context, Path file)}} 
instead.  So, if the subclass relies on its implementation of {{isSplitale 
FileSystem fs, Path file)}}, then it will compile and run, but it won't 
logically work correctly.  

One idea would be to AND or OR the results of both {{isSplitable}} methods when 
calling either one of them, but that would require subclasses to override both 
and probably be confusing.  

Other than that, I'm not really sure of a good solution either.  Perhaps 
someone else has an idea?
                
> Binary and source incompatibility in mapred.lib.CombineFileInputFormat 
> between branch-1 and branch-2
> ----------------------------------------------------------------------------------------------------
>
>                 Key: MAPREDUCE-5530
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-5530
>             Project: Hadoop Map/Reduce
>          Issue Type: Sub-task
>          Components: mrv1, mrv2
>    Affects Versions: 2.1.1-beta
>            Reporter: Robert Kanter
>            Assignee: Robert Kanter
>            Priority: Blocker
>         Attachments: MAPREDUCE-5530.patch
>
>
> {{mapred.lib.CombineFileInputFormat}} in branch-1 has this method:
> {code:java}
> protected boolean isSplitable(FileSystem fs, Path file)
> {code}
> In branch-2, {{mapred.lib.CombineFileInputFormat}} is now a subclass of 
> {{mapreduce.lib.input.CombineFileInputFormat}}, from which it inherits the 
> similar method:
> {code:java}
> protected boolean isSplitable(JobContext context, Path file)
> {code}
> This means that any code that subclasses 
> {{mapred.lib.CombineFileInputFormat}} and does not provide its own 
> implementation of {{protected boolean isSplitable(FileSystem fs, Path file)}} 
> will not be binary or source compatible if it tries to call {{isSplitable}} 
> with a {{FileSystem}} argument anywhere (that is, if compiled against 
> branch-1, it will throw a {{NoSuchMethodError}} if run against branch-2; 
> also, it won't even compile against branch-2).  

--
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