|
@@ -18,6 +18,7 @@
|
|
|
package org.apache.hadoop.hdfs.tools;
|
|
|
|
|
|
import java.net.InetSocketAddress;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import org.apache.hadoop.classification.InterfaceAudience;
|
|
@@ -34,6 +35,8 @@ import org.apache.hadoop.net.NetUtils;
|
|
|
|
|
|
import com.google.common.base.Preconditions;
|
|
|
|
|
|
+import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMESERVICES;
|
|
|
+
|
|
|
/**
|
|
|
* One of the NN NameNodes acting as the target of an administrative command
|
|
|
* (e.g. failover).
|
|
@@ -56,12 +59,19 @@ public class NNHAServiceTarget extends HAServiceTarget {
|
|
|
public NNHAServiceTarget(Configuration conf,
|
|
|
String nsId, String nnId) {
|
|
|
Preconditions.checkNotNull(nnId);
|
|
|
-
|
|
|
+
|
|
|
if (nsId == null) {
|
|
|
nsId = DFSUtil.getOnlyNameServiceIdOrNull(conf);
|
|
|
if (nsId == null) {
|
|
|
- throw new IllegalArgumentException(
|
|
|
- "Unable to determine the nameservice id.");
|
|
|
+ String errorString = "Unable to determine the name service ID.";
|
|
|
+ String[] dfsNames = conf.getStrings(DFS_NAMESERVICES);
|
|
|
+ if ((dfsNames != null) && (dfsNames.length > 1)) {
|
|
|
+ errorString = "Unable to determine the name service ID. " +
|
|
|
+ "This is an HA configuration with multiple name services " +
|
|
|
+ "configured. " + DFS_NAMESERVICES + " is set to " +
|
|
|
+ Arrays.toString(dfsNames) + ". Please re-run with the -ns option.";
|
|
|
+ }
|
|
|
+ throw new IllegalArgumentException(errorString);
|
|
|
}
|
|
|
}
|
|
|
assert nsId != null;
|