You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by sz...@apache.org on 2014/10/14 03:29:21 UTC
git commit: HDFS-7237. The command "hdfs namenode -rollingUpgrade"
throws ArrayIndexOutOfBoundsException.
Repository: hadoop
Updated Branches:
refs/heads/trunk 0e57aa3bf -> f6d0b8892
HDFS-7237. The command "hdfs namenode -rollingUpgrade" throws ArrayIndexOutOfBoundsException.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/f6d0b889
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/f6d0b889
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/f6d0b889
Branch: refs/heads/trunk
Commit: f6d0b8892ab116514fd031a61441141ac3bdfeb5
Parents: 0e57aa3
Author: Tsz-Wo Nicholas Sze <sz...@hortonworks.com>
Authored: Mon Oct 13 18:28:34 2014 -0700
Committer: Tsz-Wo Nicholas Sze <sz...@hortonworks.com>
Committed: Mon Oct 13 18:28:34 2014 -0700
----------------------------------------------------------------------
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 ++
.../hdfs/server/common/HdfsServerConstants.java | 9 ++++
.../hadoop/hdfs/server/namenode/NameNode.java | 13 +++---
.../datanode/TestHdfsServerConstants.java | 17 +++++---
.../namenode/TestNameNodeOptionParsing.java | 45 ++++++++++++++++++++
5 files changed, 75 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6d0b889/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 2109608..b82014e 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -945,6 +945,9 @@ Release 2.6.0 - UNRELEASED
HDFS-6544. Broken Link for GFS in package.html. (Suraj Nayak M via wheat9)
+ HDFS-7237. The command "hdfs namenode -rollingUpgrade" throws
+ ArrayIndexOutOfBoundsException. (szetszwo)
+
BREAKDOWN OF HDFS-6134 AND HADOOP-10150 SUBTASKS AND RELATED JIRAS
HDFS-6387. HDFS CLI admin tool for creating & deleting an
http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6d0b889/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/HdfsServerConstants.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/HdfsServerConstants.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/HdfsServerConstants.java
index 767c1b5..3e8c842 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/HdfsServerConstants.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/HdfsServerConstants.java
@@ -72,6 +72,15 @@ public final class HdfsServerConstants {
throw new IllegalArgumentException("Failed to convert \"" + s
+ "\" to " + RollingUpgradeStartupOption.class.getSimpleName());
}
+
+ public static String getAllOptionString() {
+ final StringBuilder b = new StringBuilder("<");
+ for(RollingUpgradeStartupOption opt : VALUES) {
+ b.append(opt.name().toLowerCase()).append("|");
+ }
+ b.setCharAt(b.length() - 1, '>');
+ return b.toString();
+ }
}
/** Startup options */
http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6d0b889/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
index 3f66301..4e61f05 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
@@ -216,10 +216,8 @@ public class NameNode implements NameNodeStatusMXBean {
" [" + StartupOption.CLUSTERID.getName() + " cid]" +
" [" + StartupOption.RENAMERESERVED.getName() + "<k-v pairs>] ] | \n\t["
+ StartupOption.ROLLBACK.getName() + "] | \n\t["
- + StartupOption.ROLLINGUPGRADE.getName() + " <"
- + RollingUpgradeStartupOption.DOWNGRADE.name().toLowerCase() + "|"
- + RollingUpgradeStartupOption.ROLLBACK.name().toLowerCase() + "|"
- + RollingUpgradeStartupOption.STARTED.name().toLowerCase() + "> ] | \n\t["
+ + StartupOption.ROLLINGUPGRADE.getName() + " "
+ + RollingUpgradeStartupOption.getAllOptionString() + " ] | \n\t["
+ StartupOption.FINALIZE.getName() + "] | \n\t["
+ StartupOption.IMPORT.getName() + "] | \n\t["
+ StartupOption.INITIALIZESHAREDEDITS.getName() + "] | \n\t["
@@ -1250,6 +1248,11 @@ public class NameNode implements NameNodeStatusMXBean {
} else if (StartupOption.ROLLINGUPGRADE.getName().equalsIgnoreCase(cmd)) {
startOpt = StartupOption.ROLLINGUPGRADE;
++i;
+ if (i >= argsLen) {
+ LOG.fatal("Must specify a rolling upgrade startup option "
+ + RollingUpgradeStartupOption.getAllOptionString());
+ return null;
+ }
startOpt.setRollingUpgradeStartupOption(args[i]);
} else if (StartupOption.ROLLBACK.getName().equalsIgnoreCase(cmd)) {
startOpt = StartupOption.ROLLBACK;
@@ -1508,7 +1511,7 @@ public class NameNode implements NameNodeStatusMXBean {
namenode.join();
}
} catch (Throwable e) {
- LOG.fatal("Exception in namenode join", e);
+ LOG.fatal("Failed to start namenode.", e);
terminate(1, e);
}
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6d0b889/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestHdfsServerConstants.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestHdfsServerConstants.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestHdfsServerConstants.java
index a147103..2e76b25 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestHdfsServerConstants.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestHdfsServerConstants.java
@@ -17,12 +17,12 @@
*/
package org.apache.hadoop.hdfs.server.datanode;
-import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.*;
-import org.junit.Test;
-
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
+
+import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.RollingUpgradeStartupOption;
+import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.StartupOption;
+import org.junit.Test;
/**
@@ -43,10 +43,10 @@ public class TestHdfsServerConstants {
RollingUpgradeStartupOption expectedRollupOption) {
StartupOption option = StartupOption.getEnum(value);
- assertThat(option, is(expectedOption));
+ assertEquals(expectedOption, option);
if (expectedRollupOption != null) {
- assertThat(option.getRollingUpgradeStartupOption(), is(expectedRollupOption));
+ assertEquals(expectedRollupOption, option.getRollingUpgradeStartupOption());
}
}
@@ -86,6 +86,9 @@ public class TestHdfsServerConstants {
verifyStartupOptionResult("ROLLINGUPGRADE(DOWNGRADE)",
StartupOption.ROLLINGUPGRADE,
RollingUpgradeStartupOption.DOWNGRADE);
+ verifyStartupOptionResult("ROLLINGUPGRADE(STARTED)",
+ StartupOption.ROLLINGUPGRADE,
+ RollingUpgradeStartupOption.STARTED);
try {
verifyStartupOptionResult("ROLLINGUPGRADE(UNKNOWNOPTION)", StartupOption.ROLLINGUPGRADE, null);
http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6d0b889/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeOptionParsing.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeOptionParsing.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeOptionParsing.java
index 6ef1e57..f540253 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeOptionParsing.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeOptionParsing.java
@@ -23,7 +23,9 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.apache.hadoop.hdfs.protocol.HdfsConstants;
+import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.RollingUpgradeStartupOption;
import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.StartupOption;
+import org.junit.Assert;
import org.junit.Test;
public class TestNameNodeOptionParsing {
@@ -102,4 +104,47 @@ public class TestNameNodeOptionParsing {
assertNull(opt);
}
+ @Test(timeout = 10000)
+ public void testRollingUpgrade() {
+ {
+ final String[] args = {"-rollingUpgrade"};
+ final StartupOption opt = NameNode.parseArguments(args);
+ assertNull(opt);
+ }
+
+ {
+ final String[] args = {"-rollingUpgrade", "started"};
+ final StartupOption opt = NameNode.parseArguments(args);
+ assertEquals(StartupOption.ROLLINGUPGRADE, opt);
+ assertEquals(RollingUpgradeStartupOption.STARTED, opt.getRollingUpgradeStartupOption());
+ assertTrue(RollingUpgradeStartupOption.STARTED.matches(opt));
+ }
+
+ {
+ final String[] args = {"-rollingUpgrade", "downgrade"};
+ final StartupOption opt = NameNode.parseArguments(args);
+ assertEquals(StartupOption.ROLLINGUPGRADE, opt);
+ assertEquals(RollingUpgradeStartupOption.DOWNGRADE, opt.getRollingUpgradeStartupOption());
+ assertTrue(RollingUpgradeStartupOption.DOWNGRADE.matches(opt));
+ }
+
+ {
+ final String[] args = {"-rollingUpgrade", "rollback"};
+ final StartupOption opt = NameNode.parseArguments(args);
+ assertEquals(StartupOption.ROLLINGUPGRADE, opt);
+ assertEquals(RollingUpgradeStartupOption.ROLLBACK, opt.getRollingUpgradeStartupOption());
+ assertTrue(RollingUpgradeStartupOption.ROLLBACK.matches(opt));
+ }
+
+ {
+ final String[] args = {"-rollingUpgrade", "foo"};
+ try {
+ NameNode.parseArguments(args);
+ Assert.fail();
+ } catch(IllegalArgumentException iae) {
+ // the exception is expected.
+ }
+ }
+ }
+
}