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:21:59 UTC
[1/2] 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-2 1d40bc225 -> ac20d7e24
refs/heads/trunk 82c5dd1d5 -> 68282c8ea
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/68282c8e
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/68282c8e
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/68282c8e
Branch: refs/heads/trunk
Commit: 68282c8eacfedb0298741e6c41ff0b2ec71b018c
Parents: 82c5dd1
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:18:41 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/68282c8e/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/68282c8e/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
[2/2] hadoop git commit: HDFS-12407. Journal node fails to shutdown
cleanly if JournalNodeHttpServer or JournalNodeRpcServer fails to start.
Contributed by Ajay Kumar.
Posted by ar...@apache.org.
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/ac20d7e2
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/ac20d7e2
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/ac20d7e2
Branch: refs/heads/branch-2
Commit: ac20d7e246e2a7c32486560e62046e7d49cf8f46
Parents: 1d40bc2
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:18:56 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/ac20d7e2/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 5caccf7..3eb3477 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
@@ -142,27 +142,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/ac20d7e2/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 9dd6846..71ca853 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