hadoop-common-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Aaron T. Myers (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HADOOP-7607) Simplify the RPC proxy cleanup process
Date Thu, 29 Sep 2011 00:34:47 GMT

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

Aaron T. Myers commented on HADOOP-7607:

OK, I've looked into this issue quite a bit. The thing that surprised me about Uma's description
of the problem is that the proxy object (like all Objects) should have an implementation of
{{toString()}}, so I was surprised that anything would throw a {{noSuchMethodException}}.
For that matter, note that the last line of the stack trace Uma posted references {{RetryInvocationHandler.java:70}},
which is inside a catch clause which only gets reached if the method invocation fails. I was
obviously surprised that a call to {{toString()}} would throw an exception. :)

Turns out this happens because {{RetryInvocationHandler.invoke}} assumes that the interface
implemented by the proxy declares all the methods which get invoked on it. This is done to
check for the {{@Idempotent}} annotation on the method, and this is what throws the {{NoSuchMethodException}}.
The reason the call to {{toString()}} throws an exception is because the underlying {{WritableRpcEngine}}
checks for the declaring class's ({{Object}}'s) {{versionID}} field, which obviously doesn't
exist on {{Object}}.

So, this patch doesn't really introduce the issue, except to cause {{toString()}} to be potentially
called on an implementation of {{ClientProtocol}}. Ideally we would do something to allow
the calling of {{toString()}} on RPC proxy objects without weird exceptions, but that seems
like it's beyond the scope of this JIRA. I'll file a separate one to address the issue of
calling {{toString}} on a proxy object. The patch Uma supplied won't quite work as-is, since
the {{proxy}} and {{invocationHandler}} objects can't be assumed to be non-null, but it's
close. I'll file a separate JIRA to get this addressed as well.
> Simplify the RPC proxy cleanup process
> --------------------------------------
>                 Key: HADOOP-7607
>                 URL: https://issues.apache.org/jira/browse/HADOOP-7607
>             Project: Hadoop Common
>          Issue Type: Improvement
>          Components: ipc
>    Affects Versions: 0.24.0
>            Reporter: Aaron T. Myers
>            Assignee: Aaron T. Myers
>             Fix For: 0.24.0
>         Attachments: HADOOP-7607.2.patch, hadoop-7607.0.patch, hadoop-7607.1.patch
> The process to clean up an RPC proxy object is to call RPC.stopProxy, which looks up
the RPCEngine previously associated with the interface which that proxy object provides and
calls RPCEngine.stopProxy passing in the proxy object. Every concrete implementation of RPCEngine.stopProxy
then looks up the invocation handler associated with the proxy object and calls close() on
that invocation handler.
> This process can be simplified by cutting out the steps of looking up the previously-registered
RPCEngine, and instead just having RPC.stopProxy directly look up the invocation handler for
the proxy object and call close() on it.

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