Repository: hadoop Updated Branches: refs/heads/branch-2 5e8be29ac -> f501c6dc4
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/f501c6dc Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/f501c6dc Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/f501c6dc Branch: refs/heads/branch-2 Commit: f501c6dc49e5ff724594cd198cb11c3070eb14c8 Parents: 5e8be29 Author: Arun Suresh <[email protected]> Authored: Fri Feb 12 11:18:10 2016 -0800 Committer: Arun Suresh <[email protected]> Committed: Fri Feb 12 11:19:29 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/f501c6dc/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 1916b42..0ea2d15 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -988,6 +988,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/f501c6dc/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; + } }
