hadoop-common-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Konstantin Shvachko (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (HADOOP-8558) Hadoop RPC does not allow protocol extension with common interfaces.
Date Thu, 05 Jul 2012 01:00:52 GMT

     [ 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 
Tests in error:
testCalls(org.apache.hadoop.ipc.TestProtocolExtension): java.lang.NoSuchFieldException: versionID

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


View raw message