[ https://issues.apache.org/jira/browse/HDFS-11395?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15880162#comment-15880162 ]
Nandakumar commented on HDFS-11395: ----------------------------------- {quote} Deciding what to do when we get a MultiException should probably be handled in the RetryInvocationHandler. The reason the short-circuit failure path looks incorrect is because it can cause spurious request failures if the standby thinks it is active and throws something other than StandbyException. {quote} Yeah, true. Short-circuit failure path in RequestHedgingInvocationHandler is not a proper solution here. I had a look at RetryInvocationHandler, MultiException is handled only while constructing RetryInfo in RetryInvocationHandler#RetryInfo#newRetryInfo. In {{RetryInvocationHandler#handleException}} if {{retryInfo.fail != null}} the received exception is thrown as it is, which in our case is MultiException(ExecutionException(RemoteException(Exception))) As you suggested, we can unwrap ExecutionException and throw MultiException(RemoteException(Exception)) from RequestHedgingInvocationHandler. We still have to handle MultiException in RetryInvocationHandler. In RetryInvocationHandler, we will get list of RemoteExceptions' from MultiException, from which we can exclude StandbyExceptions'. Is there any other check that can be performed to identify the proper exception to throw back to client? > RequestHedgingProxyProvider#RequestHedgingInvocationHandler hides the > Exception thrown from NameNode > ---------------------------------------------------------------------------------------------------- > > Key: HDFS-11395 > URL: https://issues.apache.org/jira/browse/HDFS-11395 > Project: Hadoop HDFS > Issue Type: Bug > Components: ha > Reporter: Nandakumar > Assignee: Nandakumar > Attachments: HDFS-11395.000.patch > > > When using RequestHedgingProxyProvider, in case of Exception (like > FileNotFoundException) from ActiveNameNode, > {{RequestHedgingProxyProvider#RequestHedgingInvocationHandler.invoke}} > receives {{ExecutionException}} since we use {{CompletionService}} for the > call. The ExecutionException is put into a map and wrapped with > {{MultiException}}. > So for a FileNotFoundException the client receives > {{MultiException(Map(ExecutionException(InvocationTargetException(RemoteException(FileNotFoundException)))))}} > It will cause problem in clients which are handling RemoteExceptions. -- This message was sent by Atlassian JIRA (v6.3.15#6346) --------------------------------------------------------------------- To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org