diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java index e3b3a54b633..740072db91e 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java @@ -75,6 +75,7 @@ import org.apache.htrace.core.TraceScope; import com.google.common.annotations.VisibleForTesting; +import static com.google.common.base.Preconditions.checkArgument; import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.*; /**************************************************************** @@ -211,7 +212,13 @@ public abstract class FileSystem extends Configured implements Closeable { * @param conf the configuration */ public void initialize(URI name, Configuration conf) throws IOException { - statistics = getStatistics(name.getScheme(), getClass()); + final String scheme; + if (name.getScheme() == null || name.getScheme().isEmpty()) { + scheme = getDefaultUri(conf).getScheme(); + } else { + scheme = name.getScheme(); + } + statistics = getStatistics(scheme, getClass()); resolveSymlinks = conf.getBoolean( CommonConfigurationKeys.FS_CLIENT_RESOLVE_REMOTE_SYMLINKS_KEY, CommonConfigurationKeys.FS_CLIENT_RESOLVE_REMOTE_SYMLINKS_DEFAULT); @@ -3576,6 +3583,8 @@ public abstract class FileSystem extends Configured implements Closeable { @Deprecated public static synchronized Statistics getStatistics(final String scheme, Class cls) { + checkArgument(scheme != null, + "No statistics is allowed for a file system with null scheme!"); Statistics result = statisticsTable.get(cls); if (result == null) { final Statistics newStats = new Statistics(scheme); diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/GlobalStorageStatistics.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/GlobalStorageStatistics.java index f22e78c7638..750296577c0 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/GlobalStorageStatistics.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/GlobalStorageStatistics.java @@ -23,6 +23,7 @@ import java.util.NavigableMap; import java.util.NoSuchElementException; import java.util.TreeMap; +import com.google.common.base.Preconditions; import org.apache.hadoop.classification.InterfaceAudience; /** @@ -55,7 +56,7 @@ public enum GlobalStorageStatistics { * null if there is none. */ public synchronized StorageStatistics get(String name) { - return map.get(name); + return name == null ? null : map.get(name); } /** @@ -70,6 +71,8 @@ public enum GlobalStorageStatistics { */ public synchronized StorageStatistics put(String name, StorageStatisticsProvider provider) { + Preconditions.checkNotNull(name, + "Storage statistics can not have a null name!"); StorageStatistics stats = map.get(name); if (stats != null) { return stats;