[
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