[ 
https://issues.apache.org/jira/browse/HADOOP-8558?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Konstantin Shvachko updated HADOOP-8558:
----------------------------------------

    Attachment: TestProtocolExtension.java

Here is an example of what I mean.
{{TestProtocol}} extends {{VersionedProtocol}} and {{ProtocolExtension}}. The 
latter is not versioned, and rpc fails with 
{code}
Tests in error:
testCalls(org.apache.hadoop.ipc.TestProtocolExtension): 
java.lang.NoSuchFieldException: versionID
{code}

I think there is no reason for this behavior, because {{TestProtocol}} is 
perfectly versioned.
The solution is to overload in {{TestProtocol}} the method declared in 
{{ProtocolExtension}}. (Uncomment the lines in the test to make it pass.) This 
is inconvenient if {{ProtocolExtension}} has a lot of methods.

This basically prevents from using other existing interfaces to define new 
protocols.
And this is incompatible with previous versions of hadoop, as the same test 
runs fine with e.g. 0.22.

Solution is simple enough - need get rid of getDeclaringClass() by passing the 
actual protocol into Invocation constructor. I would like to here if this is 
done intentionally and has some meaning I don't understand.
                
> Hadoop RPC does not allow protocol extension with common interfaces.
> --------------------------------------------------------------------
>
>                 Key: HADOOP-8558
>                 URL: https://issues.apache.org/jira/browse/HADOOP-8558
>             Project: Hadoop Common
>          Issue Type: Bug
>    Affects Versions: 2.0.0-alpha
>            Reporter: Konstantin Shvachko
>         Attachments: TestProtocolExtension.java
>
>
> Hadoop RPC fails if MyProtocol extends an interface, which is not a 
> VersionedProtocol even if MyProtocol extends also VersionedProtocol. The 
> reason is that Invocation uses Method.getDeclaringClass(), which returns the 
> interface class rather than the class of MyProtocol.
> This is incompatible with former versions.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to