YARN-8989. [YARN-8851] Move DockerCommandPlugin volume related APIs' invocation from DockerLinuxContainerRuntime#prepareContainer to #launchContainer. (Zhankun Tang via wangda)
Change-Id: Ia6d532c687168448416dfdf46f0ac34bff20e6ca Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/fe7dab8e Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/fe7dab8e Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/fe7dab8e Branch: refs/heads/HDDS-4 Commit: fe7dab8ef55f08cf18c2d62c782c1ab8930a5a15 Parents: 8976439 Author: Wangda Tan <wan...@apache.org> Authored: Wed Nov 28 14:55:16 2018 -0800 Committer: Wangda Tan <wan...@apache.org> Committed: Wed Nov 28 15:03:06 2018 -0800 ---------------------------------------------------------------------- .../runtime/DockerLinuxContainerRuntime.java | 44 ++++++++------------ .../runtime/TestDockerContainerRuntime.java | 15 ++++--- 2 files changed, 24 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/fe7dab8e/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java index 15ff0ff..225bc19 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java @@ -456,32 +456,6 @@ public class DockerLinuxContainerRuntime implements LinuxContainerRuntime { @Override public void prepareContainer(ContainerRuntimeContext ctx) throws ContainerExecutionException { - Container container = ctx.getContainer(); - - // Create volumes when needed. - if (nmContext != null - && nmContext.getResourcePluginManager().getNameToPlugins() != null) { - for (ResourcePlugin plugin : nmContext.getResourcePluginManager() - .getNameToPlugins().values()) { - DockerCommandPlugin dockerCommandPlugin = - plugin.getDockerCommandPluginInstance(); - if (dockerCommandPlugin != null) { - DockerVolumeCommand dockerVolumeCommand = - dockerCommandPlugin.getCreateDockerVolumeCommand( - ctx.getContainer()); - if (dockerVolumeCommand != null) { - runDockerVolumeCommand(dockerVolumeCommand, container); - - // After volume created, run inspect to make sure volume properly - // created. - if (dockerVolumeCommand.getSubCommand().equals( - DockerVolumeCommand.VOLUME_CREATE_SUB_COMMAND)) { - checkDockerVolumeCreated(dockerVolumeCommand, container); - } - } - } - } - } } private void checkDockerVolumeCreated( @@ -1034,14 +1008,30 @@ public class DockerLinuxContainerRuntime implements LinuxContainerRuntime { } } - // use plugins to update docker run command. + // use plugins to create volume and update docker run command. if (nmContext != null && nmContext.getResourcePluginManager().getNameToPlugins() != null) { for (ResourcePlugin plugin : nmContext.getResourcePluginManager() .getNameToPlugins().values()) { DockerCommandPlugin dockerCommandPlugin = plugin.getDockerCommandPluginInstance(); + if (dockerCommandPlugin != null) { + // Create volumes when needed. + DockerVolumeCommand dockerVolumeCommand = + dockerCommandPlugin.getCreateDockerVolumeCommand( + ctx.getContainer()); + if (dockerVolumeCommand != null) { + runDockerVolumeCommand(dockerVolumeCommand, container); + + // After volume created, run inspect to make sure volume properly + // created. + if (dockerVolumeCommand.getSubCommand().equals( + DockerVolumeCommand.VOLUME_CREATE_SUB_COMMAND)) { + checkDockerVolumeCreated(dockerVolumeCommand, container); + } + } + // Update cmd dockerCommandPlugin.updateDockerRunCommand(runCommand, container); } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/fe7dab8e/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/TestDockerContainerRuntime.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/TestDockerContainerRuntime.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/TestDockerContainerRuntime.java index 40ac618..0b5ce3a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/TestDockerContainerRuntime.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/TestDockerContainerRuntime.java @@ -1958,16 +1958,16 @@ public class TestDockerContainerRuntime { ArgumentCaptor<PrivilegedOperation> opCaptor = ArgumentCaptor.forClass( PrivilegedOperation.class); - //single invocation expected + //Three invocations expected (volume creation, volume check, run container) //due to type erasure + mocking, this verification requires a suppress // warning annotation on the entire method - verify(mockExecutor, times(2)) + verify(mockExecutor, times(3)) .executePrivilegedOperation(anyList(), opCaptor.capture(), any( File.class), anyMap(), anyBoolean(), anyBoolean()); //verification completed. we need to isolate specific invications. // hence, reset mock here - Mockito.reset(mockExecutor); + //Mockito.reset(mockExecutor); List<PrivilegedOperation> allCaptures = opCaptor.getAllValues(); @@ -2070,10 +2070,8 @@ public class TestDockerContainerRuntime { try { runtime.prepareContainer(containerRuntimeContext); - - checkVolumeCreateCommand(); - runtime.launchContainer(containerRuntimeContext); + checkVolumeCreateCommand(); } catch (ContainerExecutionException e) { if (expectFail) { // Expected @@ -2166,10 +2164,11 @@ public class TestDockerContainerRuntime { ContainerRuntimeContext containerRuntimeContext = builder.build(); runtime.prepareContainer(containerRuntimeContext); - checkVolumeCreateCommand(); runtime.launchContainer(containerRuntimeContext); - List<String> dockerCommands = readDockerCommands(); + checkVolumeCreateCommand(); + + List<String> dockerCommands = readDockerCommands(3); int expected = 14; int counter = 0; --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org