[ 
https://issues.apache.org/jira/browse/HDFS-6142?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14737914#comment-14737914
 ] 

Yongjun Zhang commented on HDFS-6142:
-------------------------------------

HI [~d.yuan],

Thanks for reporting the issue, and I happen to see it as late as today. Would 
you please check if HDFS-6475 fix the problem?

Thanks.


> StandbyException wrapped to InvalidToken exception
> --------------------------------------------------
>
>                 Key: HDFS-6142
>                 URL: https://issues.apache.org/jira/browse/HDFS-6142
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: security
>    Affects Versions: 2.2.0
>            Reporter: Ding Yuan
>
> The following code in 
> org/apache/hadoop/hdfs/security/token/delegation/DelegationTokenSecretManager.java:
> {noformat}
>   public byte[] retrievePassword(
>       DelegationTokenIdentifier identifier) throws InvalidToken {
>     try {
>       // this check introduces inconsistency in the authentication to a
>       // HA standby NN.  non-token auths are allowed into the namespace which
>       // decides whether to throw a StandbyException.  tokens are a bit
>       // different in that a standby may be behind and thus not yet know
>       // of all tokens issued by the active NN.  the following check does
>       // not allow ANY token auth, however it should allow known tokens in
>       namesystem.checkOperation(OperationCategory.READ);
>     } catch (StandbyException se) {
>       // FIXME: this is a hack to get around changing method signatures by
>       // tunneling a non-InvalidToken exception as the cause which the
>       // RPC server will unwrap before returning to the client
>       InvalidToken wrappedStandby = new InvalidToken("StandbyException");
>       wrappedStandby.initCause(se);
>       throw wrappedStandby;
>     }
>     return super.retrievePassword(identifier);
>   }
> {noformat}
> A StandbyException from namesystem.checkOperation is wrapped to InvalidToken 
> exception. The comment suggests that the RPC server will unwrap it to 
> StandbyException before sending back to the client, but this may not be the 
> case for every code path. For example, in datanode's DataXceiver.copyBlock, 
> it will call checkAccess which eventually might call retrievePassword, but 
> when copyBlock catches an InvalidToken exception, it would simply send to the 
> client that exception without unwrapping it. 
> I am not exactly sure about the possible consequence, but it seems client 
> treats StandbyException (which is perhaps much more serious) very different 
> from InvalidToken exception. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to