HADOOP-13140. FileSystem#initialize must not attempt to create StorageStatistics objects with null or empty schemes (Mingliang Liu via cmccabe)

(cherry picked from commit f2c1d9181f)
This commit is contained in:
Colin Patrick Mccabe 2016-05-18 09:15:32 -07:00
parent e9dd0d84e5
commit feabfe9cda
2 changed files with 14 additions and 2 deletions

View File

@ -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<? extends FileSystem> 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);

View File

@ -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;