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 ar...@apache.org on 2017/09/12 23:22:31 UTC
hadoop git commit: HDFS-12407. Journal node fails to shutdown cleanly
if JournalNodeHttpServer or JournalNodeRpcServer fails to start. Contributed
by Ajay Kumar.
Repository: hadoop
Updated Branches:
refs/heads/branch-3.0 4e147f7e9 -> e5a65ebc2
HDFS-12407. Journal node fails to shutdown cleanly if JournalNodeHttpServer or JournalNodeRpcServer fails to start. Contributed by Ajay Kumar.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/e5a65ebc
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/e5a65ebc
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/e5a65ebc
Branch: refs/heads/branch-3.0
Commit: e5a65ebc281a3dc333f5223b23df384781326e8a
Parents: 4e147f7
Author: Arpit Agarwal <ar...@apache.org>
Authored: Tue Sep 12 16:18:41 2017 -0700
Committer: Arpit Agarwal <ar...@apache.org>
Committed: Tue Sep 12 16:22:19 2017 -0700
----------------------------------------------------------------------
.../hdfs/qjournal/server/JournalNode.java | 47 ++++++++++++--------
.../hdfs/qjournal/server/TestJournalNode.java | 21 +++++++++
2 files changed, 49 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/e5a65ebc/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNode.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNode.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNode.java
index 6056e34..f56848c 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNode.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNode.java
@@ -157,27 +157,36 @@ public class JournalNode implements Tool, Configurable, JournalNodeMXBean {
*/
public void start() throws IOException {
Preconditions.checkState(!isStarted(), "JN already running");
-
- validateAndCreateJournalDir(localDir);
-
- DefaultMetricsSystem.initialize("JournalNode");
- JvmMetrics.create("JournalNode",
- conf.get(DFSConfigKeys.DFS_METRICS_SESSION_ID_KEY),
- DefaultMetricsSystem.instance());
-
- InetSocketAddress socAddr = JournalNodeRpcServer.getAddress(conf);
- SecurityUtil.login(conf, DFSConfigKeys.DFS_JOURNALNODE_KEYTAB_FILE_KEY,
- DFSConfigKeys.DFS_JOURNALNODE_KERBEROS_PRINCIPAL_KEY, socAddr.getHostName());
-
- registerJNMXBean();
-
- httpServer = new JournalNodeHttpServer(conf, this);
- httpServer.start();
- httpServerURI = httpServer.getServerURI().toString();
+ try {
+
+ validateAndCreateJournalDir(localDir);
- rpcServer = new JournalNodeRpcServer(conf, this);
- rpcServer.start();
+ DefaultMetricsSystem.initialize("JournalNode");
+ JvmMetrics.create("JournalNode",
+ conf.get(DFSConfigKeys.DFS_METRICS_SESSION_ID_KEY),
+ DefaultMetricsSystem.instance());
+
+ InetSocketAddress socAddr = JournalNodeRpcServer.getAddress(conf);
+ SecurityUtil.login(conf, DFSConfigKeys.DFS_JOURNALNODE_KEYTAB_FILE_KEY,
+ DFSConfigKeys.DFS_JOURNALNODE_KERBEROS_PRINCIPAL_KEY,
+ socAddr.getHostName());
+
+ registerJNMXBean();
+
+ httpServer = new JournalNodeHttpServer(conf, this);
+ httpServer.start();
+
+ httpServerURI = httpServer.getServerURI().toString();
+
+ rpcServer = new JournalNodeRpcServer(conf, this);
+ rpcServer.start();
+ } catch (IOException ioe) {
+ //Shutdown JournalNode of JournalNodeRpcServer fails to start
+ LOG.error("Failed to start JournalNode.", ioe);
+ this.stop(1);
+ throw ioe;
+ }
}
public boolean isStarted() {
http://git-wip-us.apache.org/repos/asf/hadoop/blob/e5a65ebc/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournalNode.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournalNode.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournalNode.java
index 28ec708..77b50a1 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournalNode.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournalNode.java
@@ -55,6 +55,7 @@ import org.junit.Test;
import com.google.common.base.Charsets;
import com.google.common.primitives.Bytes;
import com.google.common.primitives.Ints;
+import org.mockito.Mockito;
public class TestJournalNode {
@@ -342,4 +343,24 @@ public class TestJournalNode {
System.err.println("Time per batch: " + avgRtt + "ms");
System.err.println("Throughput: " + throughput + " bytes/sec");
}
+
+ /**
+ * Test case to check if JournalNode exits cleanly when httpserver or rpc
+ * server fails to start. Call to JournalNode start should fail with bind
+ * exception as the port is in use by the JN started in @Before routine
+ */
+ @Test
+ public void testJournalNodeStartupFailsCleanly() {
+ JournalNode jNode = Mockito.spy(new JournalNode());
+ try {
+ jNode.setConf(conf);
+ jNode.start();
+ fail("Should throw bind exception");
+ } catch (Exception e) {
+ GenericTestUtils
+ .assertExceptionContains("java.net.BindException: Port in use", e);
+ }
+ Mockito.verify(jNode).stop(1);
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org