Repository: hadoop Updated Branches: refs/heads/branch-2.8 f72cfc416 -> 4d7da8907
HDFS-9797. Log Standby exceptions thrown by RequestHedgingProxyProvider at DEBUG Level (Inigo Goiri via asuresh) (cherry picked from commit 9fdfb546fb67526ba261da5cbd005f33e0f1d9e1) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/4d7da890 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/4d7da890 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/4d7da890 Branch: refs/heads/branch-2.8 Commit: 4d7da8907fe03d8f7d58b0dd140607d53e82f505 Parents: f72cfc4 Author: Arun Suresh <[email protected]> Authored: Fri Feb 12 11:18:10 2016 -0800 Committer: Arun Suresh <[email protected]> Committed: Fri Feb 12 11:21:16 2016 -0800 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 ++ .../ha/RequestHedgingProxyProvider.java | 41 +++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/4d7da890/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index e582ffb..77bcf60 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -910,6 +910,9 @@ Release 2.8.0 - UNRELEASED HDFS-9644. Update encryption documentation to reflect nested EZs. (zhz) + HDFS-9797. Log Standby exceptions thrown by RequestHedgingProxyProvider + at DEBUG Level (Inigo Goiri via asuresh) + OPTIMIZATIONS HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than http://git-wip-us.apache.org/repos/asf/hadoop/blob/4d7da890/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/RequestHedgingProxyProvider.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/RequestHedgingProxyProvider.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/RequestHedgingProxyProvider.java index b7216b0..f4d2c6b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/RequestHedgingProxyProvider.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/RequestHedgingProxyProvider.java @@ -17,6 +17,7 @@ */ package org.apache.hadoop.hdfs.server.namenode.ha; +import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; @@ -33,6 +34,8 @@ import java.util.concurrent.Future; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.ipc.RemoteException; +import org.apache.hadoop.ipc.StandbyException; import com.google.common.annotations.VisibleForTesting; import org.apache.hadoop.io.retry.MultiException; @@ -118,8 +121,7 @@ public class RequestHedgingProxyProvider<T> extends return retVal; } catch (Exception ex) { ProxyInfo<T> tProxyInfo = proxyMap.get(callResultFuture); - LOG.warn("Invocation returned exception on " - + "[" + tProxyInfo.proxyInfo + "]"); + logProxyException(ex, tProxyInfo.proxyInfo); badResults.put(tProxyInfo.proxyInfo, ex); numAttempts--; } @@ -183,4 +185,39 @@ public class RequestHedgingProxyProvider<T> extends successfulProxy = null; } + /** + * Check the exception returned by the proxy log a warning message if it's + * not a StandbyException (expected exception). + * @param ex Exception to evaluate. + * @param proxyInfo Information of the proxy reporting the exception. + */ + private void logProxyException(Exception ex, String proxyInfo) { + if (isStandbyException(ex)) { + if (LOG.isDebugEnabled()) { + LOG.debug("Invocation returned standby exception on [" + + proxyInfo + "]"); + } + } else { + LOG.warn("Invocation returned exception on [" + proxyInfo + "]"); + } + } + + /** + * Check if the returned exception is caused by an standby namenode. + * @param ex Exception to check. + * @return If the exception is caused by an standby namenode. + */ + private boolean isStandbyException(Exception ex) { + Throwable cause = ex.getCause(); + if (cause != null) { + Throwable cause2 = cause.getCause(); + if (cause2 instanceof RemoteException) { + RemoteException remoteException = (RemoteException)cause2; + IOException unwrapRemoteException = + remoteException.unwrapRemoteException(); + return unwrapRemoteException instanceof StandbyException; + } + } + return false; + } }
