From eb177f405386c668055ab27e4247a4b94fbd2f68 Mon Sep 17 00:00:00 2001 From: "Doroszlai, Attila" <6454655+adoroszlai@users.noreply.github.com> Date: Thu, 9 Apr 2020 17:54:55 +0200 Subject: [PATCH] HDDS-3366. Ozone Client should not retry on invalid token (#802) --- .../OzoneManagerProtocolClientSideTranslatorPB.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java index 92aaf9a0718..a059dd4569e 100644 --- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java +++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java @@ -151,6 +151,7 @@ import org.apache.hadoop.security.proto.SecurityProtos.CancelDelegationTokenRequestProto; import org.apache.hadoop.security.proto.SecurityProtos.GetDelegationTokenRequestProto; import org.apache.hadoop.security.proto.SecurityProtos.RenewDelegationTokenRequestProto; +import org.apache.hadoop.security.token.SecretManager; import org.apache.hadoop.security.token.Token; import com.google.common.annotations.VisibleForTesting; @@ -296,13 +297,18 @@ private RetryAction getRetryAction(RetryAction fallbackAction, } /** - * Unwrap exception to check if it is a {@link AccessControlException}. + * Unwrap exception to check if it is some kind of access control problem + * ({@link AccessControlException} or {@link SecretManager.InvalidToken}). */ private boolean isAccessControlException(Exception ex) { if (ex instanceof ServiceException) { Throwable t = ex.getCause(); + if (t instanceof RemoteException) { + t = ((RemoteException) t).unwrapRemoteException(); + } while (t != null) { - if (t instanceof AccessControlException) { + if (t instanceof AccessControlException || + t instanceof SecretManager.InvalidToken) { return true; } t = t.getCause();