commit dae274ccc8b1a0fef3916e09f4ee3bbcdf3d4744 Author: Eric Yang Date: Mon Dec 17 17:42:18 2018 -0500 YARN-9072. Send exit command to terminate docker exec on connection close. Contributed by Eric Yang diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/ContainerShellWebSocket.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/ContainerShellWebSocket.java index 2fc1d16..ade1211 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/ContainerShellWebSocket.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/ContainerShellWebSocket.java @@ -113,6 +113,7 @@ public void onConnect(Session session) { .fromString(cId)); if (!checkAuthorization(session, container)) { session.close(1008, "Forbidden"); + return; } LOG.info(session.getRemoteAddress().getHostString() + " connected!"); LOG.info( @@ -135,6 +136,9 @@ public void onConnect(Session session) { public void onClose(Session session, int status, String reason) { try { LOG.info(session.getRemoteAddress().getHostString() + " closed!"); + String exit = "exit\r\n"; + pair.out.write(exit.getBytes(Charset.forName("UTF-8"))); + pair.out.flush(); pair.in.close(); pair.out.close(); } catch (IOException e) { diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebTerminal.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebTerminal.java index 8589b94..ec7d62c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebTerminal.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebTerminal.java @@ -48,7 +48,7 @@ public class TestNMWebTerminal { private static final File TESTROOTDIR = new File("target", TestNMWebServer.class.getSimpleName()); - private static File TESTLOGDIR = new File("target", + private static final File TESTLOGDIR = new File("target", TestNMWebServer.class.getSimpleName() + "LogDir"); private NodeHealthCheckerService healthChecker; private WebServer server;