HDFS-4486. Add log category for long-running DFSClient notices. Contributed by Zhe Zhang.

(cherry picked from commit 225569ece2)
This commit is contained in:
Colin Patrick Mccabe 2014-08-27 13:39:40 -07:00
parent ddb9d565c8
commit fdc15db2e1
6 changed files with 48 additions and 20 deletions

View File

@ -36,6 +36,7 @@ import org.apache.hadoop.fs.CommonConfigurationKeys;
import org.apache.hadoop.io.SecureIOUtils.AlreadyExistsException; import org.apache.hadoop.io.SecureIOUtils.AlreadyExistsException;
import org.apache.hadoop.util.NativeCodeLoader; import org.apache.hadoop.util.NativeCodeLoader;
import org.apache.hadoop.util.Shell; import org.apache.hadoop.util.Shell;
import org.apache.hadoop.util.PerformanceAdvisory;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -195,7 +196,7 @@ public class NativeIO {
// This can happen if the user has an older version of libhadoop.so // This can happen if the user has an older version of libhadoop.so
// installed - in this case we can continue without native IO // installed - in this case we can continue without native IO
// after warning // after warning
LOG.error("Unable to initialize NativeIO libraries", t); PerformanceAdvisory.LOG.debug("Unable to initialize NativeIO libraries", t);
} }
} }
} }
@ -573,7 +574,7 @@ public class NativeIO {
// This can happen if the user has an older version of libhadoop.so // This can happen if the user has an older version of libhadoop.so
// installed - in this case we can continue without native IO // installed - in this case we can continue without native IO
// after warning // after warning
LOG.error("Unable to initialize NativeIO libraries", t); PerformanceAdvisory.LOG.debug("Unable to initialize NativeIO libraries", t);
} }
} }
} }
@ -592,7 +593,7 @@ public class NativeIO {
// This can happen if the user has an older version of libhadoop.so // This can happen if the user has an older version of libhadoop.so
// installed - in this case we can continue without native IO // installed - in this case we can continue without native IO
// after warning // after warning
LOG.error("Unable to initialize NativeIO libraries", t); PerformanceAdvisory.LOG.debug("Unable to initialize NativeIO libraries", t);
} }
} }
} }

View File

@ -24,6 +24,7 @@ import java.util.List;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.util.NativeCodeLoader; import org.apache.hadoop.util.NativeCodeLoader;
import org.apache.hadoop.util.PerformanceAdvisory;
public class JniBasedUnixGroupsMappingWithFallback implements public class JniBasedUnixGroupsMappingWithFallback implements
GroupMappingServiceProvider { GroupMappingServiceProvider {
@ -37,7 +38,7 @@ public class JniBasedUnixGroupsMappingWithFallback implements
if (NativeCodeLoader.isNativeCodeLoaded()) { if (NativeCodeLoader.isNativeCodeLoaded()) {
this.impl = new JniBasedUnixGroupsMapping(); this.impl = new JniBasedUnixGroupsMapping();
} else { } else {
LOG.debug("Falling back to shell based"); PerformanceAdvisory.LOG.debug("Falling back to shell based");
this.impl = new ShellBasedUnixGroupsMapping(); this.impl = new ShellBasedUnixGroupsMapping();
} }
if (LOG.isDebugEnabled()){ if (LOG.isDebugEnabled()){

View File

@ -0,0 +1,24 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.hadoop.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class PerformanceAdvisory {
public static final Log LOG = LogFactory.getLog(PerformanceAdvisory.class);
}

View File

@ -162,6 +162,9 @@ Release 2.6.0 - UNRELEASED
HDFS-6899. Allow changing MiniDFSCluster volumes per DN and capacity HDFS-6899. Allow changing MiniDFSCluster volumes per DN and capacity
per volume. (Arpit Agarwal) per volume. (Arpit Agarwal)
HDFS-4486. Add log category for long-running DFSClient notices (Zhe Zhang
via Colin Patrick McCabe)
OPTIMIZATIONS OPTIMIZATIONS
HDFS-6690. Deduplicate xattr names in memory. (wang) HDFS-6690. Deduplicate xattr names in memory. (wang)

View File

@ -54,6 +54,7 @@ import org.apache.hadoop.security.AccessControlException;
import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.SecretManager.InvalidToken; import org.apache.hadoop.security.token.SecretManager.InvalidToken;
import org.apache.hadoop.security.token.Token; import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.util.PerformanceAdvisory;
import org.apache.hadoop.util.Time; import org.apache.hadoop.util.Time;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
@ -343,10 +344,9 @@ public class BlockReaderFactory implements ShortCircuitReplicaCreator {
return null; return null;
} }
if (clientContext.getDisableLegacyBlockReaderLocal()) { if (clientContext.getDisableLegacyBlockReaderLocal()) {
if (LOG.isTraceEnabled()) { PerformanceAdvisory.LOG.debug(this + ": can't construct " +
LOG.trace(this + ": can't construct BlockReaderLocalLegacy because " + "BlockReaderLocalLegacy because " +
"disableLegacyBlockReaderLocal is set."); "disableLegacyBlockReaderLocal is set.");
}
return null; return null;
} }
IOException ioe = null; IOException ioe = null;
@ -385,10 +385,8 @@ public class BlockReaderFactory implements ShortCircuitReplicaCreator {
getPathInfo(inetSocketAddress, conf); getPathInfo(inetSocketAddress, conf);
} }
if (!pathInfo.getPathState().getUsableForShortCircuit()) { if (!pathInfo.getPathState().getUsableForShortCircuit()) {
if (LOG.isTraceEnabled()) { PerformanceAdvisory.LOG.debug(this + ": " + pathInfo + " is not " +
LOG.trace(this + ": " + pathInfo + " is not " + "usable for short circuit; giving up on BlockReaderLocal.");
"usable for short circuit; giving up on BlockReaderLocal.");
}
return null; return null;
} }
ShortCircuitCache cache = clientContext.getShortCircuitCache(); ShortCircuitCache cache = clientContext.getShortCircuitCache();
@ -404,8 +402,9 @@ public class BlockReaderFactory implements ShortCircuitReplicaCreator {
} }
if (info.getReplica() == null) { if (info.getReplica() == null) {
if (LOG.isTraceEnabled()) { if (LOG.isTraceEnabled()) {
LOG.trace(this + ": failed to get ShortCircuitReplica. " + PerformanceAdvisory.LOG.debug(this + ": failed to get " +
"Cannot construct BlockReaderLocal via " + pathInfo.getPath()); "ShortCircuitReplica. Cannot construct " +
"BlockReaderLocal via " + pathInfo.getPath());
} }
return null; return null;
} }
@ -580,11 +579,9 @@ public class BlockReaderFactory implements ShortCircuitReplicaCreator {
getPathInfo(inetSocketAddress, conf); getPathInfo(inetSocketAddress, conf);
} }
if (!pathInfo.getPathState().getUsableForDataTransfer()) { if (!pathInfo.getPathState().getUsableForDataTransfer()) {
if (LOG.isTraceEnabled()) { PerformanceAdvisory.LOG.debug(this + ": not trying to create a " +
LOG.trace(this + ": not trying to create a remote block reader " + "remote block reader because the UNIX domain socket at " +
"because the UNIX domain socket at " + pathInfo + pathInfo + " is not usable.");
" is not usable.");
}
return null; return null;
} }
if (LOG.isTraceEnabled()) { if (LOG.isTraceEnabled()) {

View File

@ -33,6 +33,7 @@ import org.apache.hadoop.net.unix.DomainSocket;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import org.apache.hadoop.util.PerformanceAdvisory;
public class DomainSocketFactory { public class DomainSocketFactory {
private static final Log LOG = LogFactory.getLog(DomainSocketFactory.class); private static final Log LOG = LogFactory.getLog(DomainSocketFactory.class);
@ -105,7 +106,8 @@ public class DomainSocketFactory {
} }
if (feature == null) { if (feature == null) {
LOG.debug("Both short-circuit local reads and UNIX domain socket are disabled."); PerformanceAdvisory.LOG.debug(
"Both short-circuit local reads and UNIX domain socket are disabled.");
} else { } else {
if (conf.getDomainSocketPath().isEmpty()) { if (conf.getDomainSocketPath().isEmpty()) {
throw new HadoopIllegalArgumentException(feature + " is enabled but " throw new HadoopIllegalArgumentException(feature + " is enabled but "