Fixing remaining issues, removing TODOs and FIXMEs Change-Id: Ieb762713fee2281cde5a7826bc03eafe16de64b1
Project: http://git-wip-us.apache.org/repos/asf/oozie/repo Commit: http://git-wip-us.apache.org/repos/asf/oozie/commit/739d53a4 Tree: http://git-wip-us.apache.org/repos/asf/oozie/tree/739d53a4 Diff: http://git-wip-us.apache.org/repos/asf/oozie/diff/739d53a4 Branch: refs/heads/oya Commit: 739d53a47c101d9d779382177eaa19a9725a0e46 Parents: 8d60f7f Author: Peter Bacsko <[email protected]> Authored: Fri Nov 25 11:02:44 2016 +0100 Committer: Peter Bacsko <[email protected]> Committed: Fri Nov 25 11:02:44 2016 +0100 ---------------------------------------------------------------------- .../action/hadoop/DistcpActionExecutor.java | 5 ++ .../oozie/action/hadoop/HiveActionExecutor.java | 5 ++ .../oozie/action/hadoop/JavaActionExecutor.java | 53 +++++------ .../action/hadoop/MapReduceActionExecutor.java | 5 ++ .../oozie/action/hadoop/PigActionExecutor.java | 5 ++ .../action/hadoop/SparkActionExecutor.java | 10 +++ .../action/hadoop/SqoopActionExecutor.java | 4 + .../action/hadoop/AMRMCallBackHandler.java | 2 +- .../apache/oozie/action/hadoop/LauncherAM.java | 93 +++++++++----------- .../oozie/action/hadoop/TestLauncherAM.java | 33 ++++--- 10 files changed, 122 insertions(+), 93 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/oozie/blob/739d53a4/core/src/main/java/org/apache/oozie/action/hadoop/DistcpActionExecutor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/oozie/action/hadoop/DistcpActionExecutor.java b/core/src/main/java/org/apache/oozie/action/hadoop/DistcpActionExecutor.java index e000a08..fb26399 100644 --- a/core/src/main/java/org/apache/oozie/action/hadoop/DistcpActionExecutor.java +++ b/core/src/main/java/org/apache/oozie/action/hadoop/DistcpActionExecutor.java @@ -107,6 +107,11 @@ public class DistcpActionExecutor extends JavaActionExecutor{ } @Override + protected boolean needToAddMRJars() { + return true; + } + + @Override protected String getLauncherMain(Configuration launcherConf, Element actionXml) { return launcherConf.get(LauncherMapper.CONF_OOZIE_ACTION_MAIN_CLASS, CONF_OOZIE_DISTCP_ACTION_MAIN_CLASS); } http://git-wip-us.apache.org/repos/asf/oozie/blob/739d53a4/core/src/main/java/org/apache/oozie/action/hadoop/HiveActionExecutor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/oozie/action/hadoop/HiveActionExecutor.java b/core/src/main/java/org/apache/oozie/action/hadoop/HiveActionExecutor.java index 82a955c..a2d4ca0 100644 --- a/core/src/main/java/org/apache/oozie/action/hadoop/HiveActionExecutor.java +++ b/core/src/main/java/org/apache/oozie/action/hadoop/HiveActionExecutor.java @@ -133,6 +133,11 @@ public class HiveActionExecutor extends ScriptLanguageActionExecutor { } @Override + protected boolean needToAddMRJars() { + return true; + } + + @Override protected JobConf loadHadoopDefaultResources(Context context, Element actionXml) { boolean loadDefaultResources = ConfigurationService .getBoolean(HadoopAccessorService.ACTION_CONFS_LOAD_DEFAULT_RESOURCES); http://git-wip-us.apache.org/repos/asf/oozie/blob/739d53a4/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java b/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java index 56226ee..b8c870c 100644 --- a/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java +++ b/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java @@ -29,6 +29,7 @@ import java.nio.ByteBuffer; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -37,7 +38,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.Set; -import java.util.regex.Pattern; import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configuration; @@ -144,7 +144,6 @@ public class JavaActionExecutor extends ActionExecutor { protected static final String HADOOP_USER = "user.name"; protected XLog LOG = XLog.getLog(getClass()); - private static final Pattern heapPattern = Pattern.compile("-Xmx(([0-9]+)[mMgG])"); private static final String JAVA_TMP_DIR_SETTINGS = "-Djava.io.tmpdir="; public XConfiguration workflowConf = null; @@ -914,7 +913,6 @@ public class JavaActionExecutor extends ActionExecutor { } public void submitLauncher(FileSystem actionFs, final Context context, WorkflowAction action) throws ActionExecutorException { - JobClient jobClient = null; boolean exception = false; YarnClient yarnClient = null; try { @@ -1054,20 +1052,6 @@ public class JavaActionExecutor extends ActionExecutor { if (yarnClient != null) { Closeables.closeQuietly(yarnClient); } - - if (jobClient != null) { - try { - jobClient.close(); - } - catch (Exception e) { - if (exception) { - LOG.error("JobClient error: ", e); - } - else { - throw convertException(e); - } - } - } } } @@ -1107,23 +1091,17 @@ public class JavaActionExecutor extends ActionExecutor { ClasspathUtils.setupClasspath(env, launcherJobConf); // FIXME: move this to specific places where it's actually needed - keeping it here for now - ClasspathUtils.addMapReduceToClasspath(env, launcherJobConf); - - // FIXME: Pyspark fix - // FIXME: Do we want to support mapred.child.env? - env.put("SPARK_HOME", "."); + if (needToAddMRJars()) { + ClasspathUtils.addMapReduceToClasspath(env, launcherJobConf); + } - amContainer.setEnvironment(env); + addActionSpecificEnvVars(env); + amContainer.setEnvironment(Collections.unmodifiableMap(env)); // Set the command List<String> vargs = new ArrayList<String>(6); vargs.add(MRApps.crossPlatformifyMREnv(launcherJobConf, ApplicationConstants.Environment.JAVA_HOME) + "/bin/java"); - // TODO: OYA: remove attach debugger to AM; useful for debugging -// vargs.add("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"); - - // FIXME: decide what to do with this method call - signature keeps changing - // MRApps.addLog4jSystemProperties("INFO", 1024 * 1024, 0, vargs, null); vargs.add("-Dlog4j.configuration=container-log4j.properties"); vargs.add("-Dlog4j.debug=true"); @@ -1143,8 +1121,7 @@ public class JavaActionExecutor extends ActionExecutor { } List<String> vargsFinal = ImmutableList.of(mergedCommand.toString()); - LOG.debug("Command to launch container for ApplicationMaster is : " - + mergedCommand); + LOG.debug("Command to launch container for ApplicationMaster is: {0}", mergedCommand); amContainer.setCommands(vargsFinal); appContext.setAMContainerSpec(amContainer); @@ -1381,6 +1358,22 @@ public class JavaActionExecutor extends ActionExecutor { return action.getExternalId(); } + /** + * If returns true, it means that we have to add Hadoop MR jars to the classpath. Subclasses should override this method if necessary. + * + */ + protected boolean needToAddMRJars() { + return false; + } + + /** + * Adds action-specific environment variables. Default implementation is no-op. Subclasses should override this method if necessary. + * + */ + protected void addActionSpecificEnvVars(Map<String, String> env) { + // nop + } + @Override public void check(Context context, WorkflowAction action) throws ActionExecutorException { boolean fallback = false; http://git-wip-us.apache.org/repos/asf/oozie/blob/739d53a4/core/src/main/java/org/apache/oozie/action/hadoop/MapReduceActionExecutor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/oozie/action/hadoop/MapReduceActionExecutor.java b/core/src/main/java/org/apache/oozie/action/hadoop/MapReduceActionExecutor.java index 11d1787..51a9c15 100644 --- a/core/src/main/java/org/apache/oozie/action/hadoop/MapReduceActionExecutor.java +++ b/core/src/main/java/org/apache/oozie/action/hadoop/MapReduceActionExecutor.java @@ -339,6 +339,11 @@ public class MapReduceActionExecutor extends JavaActionExecutor { } @Override + protected boolean needToAddMRJars() { + return true; + } + + @Override public void check(Context context, WorkflowAction action) throws ActionExecutorException { Map<String, String> actionData = Collections.emptyMap(); JobConf jobConf = null; http://git-wip-us.apache.org/repos/asf/oozie/blob/739d53a4/core/src/main/java/org/apache/oozie/action/hadoop/PigActionExecutor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/oozie/action/hadoop/PigActionExecutor.java b/core/src/main/java/org/apache/oozie/action/hadoop/PigActionExecutor.java index cbb7436..347b034 100644 --- a/core/src/main/java/org/apache/oozie/action/hadoop/PigActionExecutor.java +++ b/core/src/main/java/org/apache/oozie/action/hadoop/PigActionExecutor.java @@ -124,6 +124,11 @@ public class PigActionExecutor extends ScriptLanguageActionExecutor { } @Override + protected boolean needToAddMRJars() { + return true; + } + + @Override protected JobConf loadHadoopDefaultResources(Context context, Element actionXml) { boolean loadDefaultResources = ConfigurationService .getBoolean(HadoopAccessorService.ACTION_CONFS_LOAD_DEFAULT_RESOURCES); http://git-wip-us.apache.org/repos/asf/oozie/blob/739d53a4/core/src/main/java/org/apache/oozie/action/hadoop/SparkActionExecutor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/oozie/action/hadoop/SparkActionExecutor.java b/core/src/main/java/org/apache/oozie/action/hadoop/SparkActionExecutor.java index 32dadf0..c373758 100644 --- a/core/src/main/java/org/apache/oozie/action/hadoop/SparkActionExecutor.java +++ b/core/src/main/java/org/apache/oozie/action/hadoop/SparkActionExecutor.java @@ -153,6 +153,16 @@ public class SparkActionExecutor extends JavaActionExecutor { } @Override + protected boolean needToAddMRJars() { + return true; + } + + @Override + protected void addActionSpecificEnvVars(Map<String, String> env) { + env.put("SPARK_HOME", "."); + } + + @Override protected String getLauncherMain(Configuration launcherConf, Element actionXml) { return launcherConf.get(LauncherMapper.CONF_OOZIE_ACTION_MAIN_CLASS, SPARK_MAIN_CLASS_NAME); } http://git-wip-us.apache.org/repos/asf/oozie/blob/739d53a4/core/src/main/java/org/apache/oozie/action/hadoop/SqoopActionExecutor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/oozie/action/hadoop/SqoopActionExecutor.java b/core/src/main/java/org/apache/oozie/action/hadoop/SqoopActionExecutor.java index c6266df..54a860e 100644 --- a/core/src/main/java/org/apache/oozie/action/hadoop/SqoopActionExecutor.java +++ b/core/src/main/java/org/apache/oozie/action/hadoop/SqoopActionExecutor.java @@ -225,6 +225,10 @@ public class SqoopActionExecutor extends JavaActionExecutor { } } + @Override + protected boolean needToAddMRJars() { + return true; + } /** * Return the sharelib name for the action. http://git-wip-us.apache.org/repos/asf/oozie/blob/739d53a4/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/AMRMCallBackHandler.java ---------------------------------------------------------------------- diff --git a/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/AMRMCallBackHandler.java b/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/AMRMCallBackHandler.java index 63213e6..e6c9d04 100644 --- a/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/AMRMCallBackHandler.java +++ b/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/AMRMCallBackHandler.java @@ -53,7 +53,7 @@ public class AMRMCallBackHandler implements AMRMClientAsync.CallbackHandler { @Override public float getProgress() { - return 0.5f; //TODO: OYA: maybe some action types can report better progress? + return 0.5f; } @Override http://git-wip-us.apache.org/repos/asf/oozie/blob/739d53a4/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/LauncherAM.java ---------------------------------------------------------------------- diff --git a/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/LauncherAM.java b/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/LauncherAM.java index 881fa72..a8d1e09 100644 --- a/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/LauncherAM.java +++ b/sharelib/oozie/src/main/java/org/apache/oozie/action/hadoop/LauncherAM.java @@ -24,7 +24,7 @@ import java.io.StringWriter; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.security.Permission; -import java.security.PrivilegedAction; +import java.security.PrivilegedExceptionAction; import java.text.MessageFormat; import java.util.HashMap; import java.util.Map; @@ -42,6 +42,7 @@ import org.apache.hadoop.yarn.client.api.async.AMRMClientAsync; import org.apache.hadoop.yarn.exceptions.YarnException; import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Objects; import com.google.common.base.Preconditions; public class LauncherAM { @@ -116,6 +117,8 @@ public class LauncherAM { Preconditions.checkArgument(!submitterUser.isEmpty(), "Submitter user is undefined"); System.out.println("Submitter user is: " + submitterUser); + // We don't need remote/proxy user if the current login user is the workflow submitter + // Otherwise we have to create a remote user if (UserGroupInformation.getLoginUser().getShortUserName().equals(submitterUser)) { System.out.println("Using login user for UGI"); ugi = UserGroupInformation.getLoginUser(); @@ -160,31 +163,13 @@ public class LauncherAM { errorHolder.setErrorCause(ex); throw ex; } - - registerWithRM(); - actionDir = new Path(launcherJobConf.get(OOZIE_ACTION_DIR_PATH)); - try { - System.out.println("\nStarting the execution of prepare actions"); - executePrepare(ugi); - System.out.println("Completed the execution of prepare actions successfully"); - } catch (Exception ex) { - errorHolder.setErrorMessage("Prepare execution in the Launcher AM has failed"); - errorHolder.setErrorCause(ex); - throw ex; - } - + registerWithRM(); + executePrepare(ugi, errorHolder); final String[] mainArgs = getMainArguments(launcherJobConf); - - // TODO: OYA: should we allow turning this off? - // TODO: OYA: what should default be? - if (launcherJobConf.getBoolean("oozie.launcher.print.debug.info", true)) { - printDebugInfo(); - } - + printDebugInfo(); setupMainConfiguration(); - launcerExecutedProperly = runActionMain(mainArgs, errorHolder, ugi); if (launcerExecutedProperly) { @@ -323,11 +308,12 @@ public class LauncherAM { } // Method to execute the prepare actions - private void executePrepare(UserGroupInformation ugi) throws Exception { - Exception e = ugi.doAs(new PrivilegedAction<Exception>() { - @Override - public Exception run() { - try { + private void executePrepare(UserGroupInformation ugi, ErrorHolder errorHolder) throws Exception { + try { + System.out.println("\nStarting the execution of prepare actions"); + ugi.doAs(new PrivilegedExceptionAction<Void>() { + @Override + public Void run() throws Exception { String prepareXML = launcherJobConf.get(ACTION_PREPARE_XML); if (prepareXML != null) { if (prepareXML.length() != 0) { @@ -338,16 +324,14 @@ public class LauncherAM { System.out.println("There are no prepare actions to execute."); } } - } catch (Exception e) { - e.printStackTrace(); - return e; + return null; } - return null; - } - }); - - if (e != null) { - throw e; + }); + System.out.println("Completed the execution of prepare actions successfully"); + } catch (Exception ex) { + errorHolder.setErrorMessage("Prepare execution in the Launcher AM has failed"); + errorHolder.setErrorCause(ex); + throw ex; } } @@ -366,20 +350,21 @@ public class LauncherAM { System.setProperty("oozie.job.launch.time", String.valueOf(System.currentTimeMillis())); } - private boolean runActionMain(final String[] mainArgs, final ErrorHolder eHolder, UserGroupInformation ugi) { + private boolean runActionMain(final String[] mainArgs, final ErrorHolder eHolder, UserGroupInformation ugi) throws Exception { // using AtomicBoolean because we want to modify it inside run() final AtomicBoolean actionMainExecutedProperly = new AtomicBoolean(false); - ugi.doAs(new PrivilegedAction<Void>() { + ugi.doAs(new PrivilegedExceptionAction<Void>() { @Override - public Void run() { + public Void run() throws Exception { try { setRecoveryId(); - Class<?> klass = launcherJobConf.getClass(CONF_OOZIE_ACTION_MAIN_CLASS, Object.class); + Class<?> klass = launcherJobConf.getClass(CONF_OOZIE_ACTION_MAIN_CLASS, null); + Preconditions.checkNotNull(klass, "Launcher class should not be null"); System.out.println("Launcher class: " + klass.toString()); Method mainMethod = klass.getMethod("main", String[].class); // Enable LauncherSecurityManager to catch System.exit calls - launcherSecurityManager.set(); + launcherSecurityManager.enable(); mainMethod.invoke(null, (Object) mainArgs); System.out.println(); @@ -430,7 +415,7 @@ public class LauncherAM { eHolder.setErrorCause(t); } finally { // Disable LauncherSecurityManager - launcherSecurityManager.unset(); + launcherSecurityManager.disable(); } return null; @@ -497,7 +482,11 @@ public class LauncherAM { private void updateActionDataWithFailure(ErrorHolder eHolder, Map<String, String> actionData) { if (eHolder.getErrorCause() != null && eHolder.getErrorCause().getMessage() != null) { - eHolder.setErrorMessage(eHolder.getErrorMessage() + ", " + eHolder.getErrorCause().getMessage()); + if (Objects.equal(eHolder.getErrorMessage(), eHolder.getErrorCause().getMessage())) { + eHolder.setErrorMessage(eHolder.getErrorMessage()); + } else { + eHolder.setErrorMessage(eHolder.getErrorMessage() + ", " + eHolder.getErrorCause().getMessage()); + } } Properties errorProps = new Properties(); @@ -553,27 +542,27 @@ public class LauncherAM { public static class LauncherSecurityManager extends SecurityManager { private boolean exitInvoked; private int exitCode; - private SecurityManager securityManager; + private SecurityManager originalSecurityManager; public LauncherSecurityManager() { exitInvoked = false; exitCode = 0; - securityManager = System.getSecurityManager(); + originalSecurityManager = System.getSecurityManager(); } @Override public void checkPermission(Permission perm, Object context) { - if (securityManager != null) { + if (originalSecurityManager != null) { // check everything with the original SecurityManager - securityManager.checkPermission(perm, context); + originalSecurityManager.checkPermission(perm, context); } } @Override public void checkPermission(Permission perm) { - if (securityManager != null) { + if (originalSecurityManager != null) { // check everything with the original SecurityManager - securityManager.checkPermission(perm); + originalSecurityManager.checkPermission(perm); } } @@ -592,15 +581,15 @@ public class LauncherAM { return exitCode; } - public void set() { + public void enable() { if (System.getSecurityManager() != this) { System.setSecurityManager(this); } } - public void unset() { + public void disable() { if (System.getSecurityManager() == this) { - System.setSecurityManager(securityManager); + System.setSecurityManager(originalSecurityManager); } } } http://git-wip-us.apache.org/repos/asf/oozie/blob/739d53a4/sharelib/oozie/src/test/java/org/apache/oozie/action/hadoop/TestLauncherAM.java ---------------------------------------------------------------------- diff --git a/sharelib/oozie/src/test/java/org/apache/oozie/action/hadoop/TestLauncherAM.java b/sharelib/oozie/src/test/java/org/apache/oozie/action/hadoop/TestLauncherAM.java index 052673d..777cfdd 100644 --- a/sharelib/oozie/src/test/java/org/apache/oozie/action/hadoop/TestLauncherAM.java +++ b/sharelib/oozie/src/test/java/org/apache/oozie/action/hadoop/TestLauncherAM.java @@ -56,7 +56,7 @@ import static org.mockito.Mockito.verifyZeroInteractions; import java.io.File; import java.io.IOException; import java.io.StringReader; -import java.security.PrivilegedAction; +import java.security.PrivilegedExceptionAction; import java.util.Map; import java.util.Properties; @@ -137,7 +137,7 @@ public class TestLauncherAM { private ExpectedFailureDetails failureDetails = new ExpectedFailureDetails(); @Before - public void setup() throws IOException { + public void setup() throws Exception { configureMocksForHappyPath(); launcherJobConfig.set(LauncherMapper.OOZIE_ACTION_RECOVERY_ID, "1"); instantiateLauncher(); @@ -185,6 +185,20 @@ public class TestLauncherAM { } @Test + public void testLauncherClassNotDefined() throws Exception { + launcherJobConfig.unset(LauncherAM.CONF_OOZIE_ACTION_MAIN_CLASS); + + executeLauncher(); + + failureDetails.expectedExceptionMessage("Launcher class should not be null") + .expectedErrorCode(EXIT_CODE_0) + .expectedErrorReason("Launcher class should not be null") + .withStackTrace(); + + assertFailedExecution(); + } + + @Test public void testMainIsSuccessfullyInvokedAndAsyncErrorReceived() throws Exception { ErrorHolder errorHolder = new ErrorHolder(); errorHolder.setErrorCode(6); @@ -394,7 +408,7 @@ public class TestLauncherAM { failureDetails.expectedExceptionMessage("IO error") .expectedErrorCode(EXIT_CODE_0) - .expectedErrorReason("IO error, IO error") + .expectedErrorReason("IO error") .withStackTrace(); assertFailedExecution(); @@ -419,7 +433,7 @@ public class TestLauncherAM { failureDetails.expectedExceptionMessage("IO error") .expectedErrorCode(EXIT_CODE_0) - .expectedErrorReason("IO error, IO error") + .expectedErrorReason("IO error") .withStackTrace(); verify(hdfsOperationsMock).readFileContents(any(Path.class), eq(launcherJobConfig)); @@ -452,8 +466,8 @@ public class TestLauncherAM { containerId); } - @SuppressWarnings("unchecked") - private void configureMocksForHappyPath() throws IOException { + @SuppressWarnings("unchecked") + private void configureMocksForHappyPath() throws Exception { launcherJobConfig.set(LauncherAM.OOZIE_ACTION_DIR_PATH, "dummy"); launcherJobConfig.set(LauncherAM.OOZIE_JOB_ID, "dummy"); launcherJobConfig.set(LauncherAM.OOZIE_ACTION_ID, "dummy"); @@ -461,12 +475,11 @@ public class TestLauncherAM { given(localFsOperationsMock.readLauncherConf()).willReturn(launcherJobConfig); given(localFsOperationsMock.fileExists(any(File.class))).willReturn(true); - willReturn(amRmAsyncClientMock).given(amRMClientAsyncFactoryMock).createAMRMClientAsync(anyInt()); - given(ugiMock.doAs(any(PrivilegedAction.class))).willAnswer(new Answer<Object>() { + given(ugiMock.doAs(any(PrivilegedExceptionAction.class))).willAnswer(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { - PrivilegedAction<?> action = (PrivilegedAction<?>) invocation.getArguments()[0]; + PrivilegedExceptionAction<?> action = (PrivilegedExceptionAction<?>) invocation.getArguments()[0]; return action.run(); } }); @@ -498,7 +511,7 @@ public class TestLauncherAM { verify(amRmAsyncClientMock).registerApplicationMaster(anyString(), anyInt(), anyString()); verify(amRmAsyncClientMock).unregisterApplicationMaster(FinalApplicationStatus.SUCCEEDED, EMPTY_STRING, EMPTY_STRING); verify(amRmAsyncClientMock).stop(); - verify(ugiMock, times(2)).doAs(any(PrivilegedAction.class)); // prepare & action main + verify(ugiMock, times(2)).doAs(any(PrivilegedExceptionAction.class)); // prepare & action main verify(hdfsOperationsMock).uploadActionDataToHDFS(any(Configuration.class), any(Path.class), any(Map.class)); verify(launcherCallbackNotifierFactoryMock).createCallbackNotifier(any(Configuration.class)); verify(launcherCallbackNotifierMock).notifyURL(actionResult);
