|
@@ -20,9 +20,12 @@ package org.apache.hadoop.yarn.server.uam;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.security.PrivilegedExceptionAction;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
import java.util.concurrent.Executors;
|
|
|
+import java.util.concurrent.TimeoutException;
|
|
|
|
|
|
import org.apache.hadoop.conf.Configuration;
|
|
|
import org.apache.hadoop.security.UserGroupInformation;
|
|
@@ -36,8 +39,11 @@ import org.apache.hadoop.yarn.api.protocolrecords.FinishApplicationMasterRequest
|
|
|
import org.apache.hadoop.yarn.api.protocolrecords.FinishApplicationMasterResponse;
|
|
|
import org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterRequest;
|
|
|
import org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterResponse;
|
|
|
+import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext;
|
|
|
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
|
|
|
import org.apache.hadoop.yarn.api.records.ApplicationId;
|
|
|
+import org.apache.hadoop.yarn.api.records.Priority;
|
|
|
+import org.apache.hadoop.yarn.api.records.Resource;
|
|
|
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
|
|
import org.apache.hadoop.yarn.exceptions.YarnException;
|
|
|
import org.apache.hadoop.yarn.security.AMRMTokenIdentifier;
|
|
@@ -78,7 +84,7 @@ public class TestUnmanagedApplicationManager {
|
|
|
|
|
|
uam = new TestableUnmanagedApplicationManager(conf,
|
|
|
attemptId.getApplicationId(), null, "submitter", "appNameSuffix", true,
|
|
|
- "rm");
|
|
|
+ "rm", null);
|
|
|
|
|
|
threadpool = Executors.newCachedThreadPool();
|
|
|
uamPool = new TestableUnmanagedAMPoolManager(this.threadpool);
|
|
@@ -434,8 +440,16 @@ public class TestUnmanagedApplicationManager {
|
|
|
ApplicationId appId, String queueName, String submitter,
|
|
|
String appNameSuffix, boolean keepContainersAcrossApplicationAttempts,
|
|
|
String rmName) {
|
|
|
+ this(conf, appId, queueName, submitter, appNameSuffix,
|
|
|
+ keepContainersAcrossApplicationAttempts, rmName, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ public TestableUnmanagedApplicationManager(Configuration conf,
|
|
|
+ ApplicationId appId, String queueName, String submitter,
|
|
|
+ String appNameSuffix, boolean keepContainersAcrossApplicationAttempts,
|
|
|
+ String rmName, ApplicationSubmissionContext originalApplicationSubmissionContext) {
|
|
|
super(conf, appId, queueName, submitter, appNameSuffix,
|
|
|
- keepContainersAcrossApplicationAttempts, rmName);
|
|
|
+ keepContainersAcrossApplicationAttempts, rmName, originalApplicationSubmissionContext);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -505,9 +519,11 @@ public class TestUnmanagedApplicationManager {
|
|
|
@Override
|
|
|
public UnmanagedApplicationManager createUAM(Configuration configuration,
|
|
|
ApplicationId appId, String queueName, String submitter, String appNameSuffix,
|
|
|
- boolean keepContainersAcrossApplicationAttempts, String rmId) {
|
|
|
+ boolean keepContainersAcrossApplicationAttempts, String rmId,
|
|
|
+ ApplicationSubmissionContext originalAppSubmissionContext) {
|
|
|
return new TestableUnmanagedApplicationManager(configuration, appId, queueName, submitter,
|
|
|
- appNameSuffix, keepContainersAcrossApplicationAttempts, rmId);
|
|
|
+ appNameSuffix, keepContainersAcrossApplicationAttempts, rmId,
|
|
|
+ originalAppSubmissionContext);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -516,13 +532,13 @@ public class TestUnmanagedApplicationManager {
|
|
|
ApplicationAttemptId attemptId1 =
|
|
|
ApplicationAttemptId.newInstance(ApplicationId.newInstance(Time.now(), 1), 1);
|
|
|
Token<AMRMTokenIdentifier> token1 = uamPool.launchUAM("SC-1", this.conf,
|
|
|
- attemptId1.getApplicationId(), "default", "test-user", "SC-HOME", true, "SC-1");
|
|
|
+ attemptId1.getApplicationId(), "default", "test-user", "SC-HOME", true, "SC-1", null);
|
|
|
Assert.assertNotNull(token1);
|
|
|
|
|
|
ApplicationAttemptId attemptId2 =
|
|
|
ApplicationAttemptId.newInstance(ApplicationId.newInstance(Time.now(), 2), 1);
|
|
|
Token<AMRMTokenIdentifier> token2 = uamPool.launchUAM("SC-2", this.conf,
|
|
|
- attemptId2.getApplicationId(), "default", "test-user", "SC-HOME", true, "SC-2");
|
|
|
+ attemptId2.getApplicationId(), "default", "test-user", "SC-HOME", true, "SC-2", null);
|
|
|
Assert.assertNotNull(token2);
|
|
|
|
|
|
Map<String, UnmanagedApplicationManager> unmanagedAppMasterMap =
|
|
@@ -542,4 +558,40 @@ public class TestUnmanagedApplicationManager {
|
|
|
100, 2000);
|
|
|
Assert.assertEquals(0, unmanagedAppMasterMap.size());
|
|
|
}
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testApplicationAttributes()
|
|
|
+ throws IOException, YarnException, InterruptedException, TimeoutException {
|
|
|
+ long now = Time.now();
|
|
|
+ ApplicationId applicationId = ApplicationId.newInstance(now, 10);
|
|
|
+ ApplicationSubmissionContext appSubmissionContext = ApplicationSubmissionContext.newInstance(
|
|
|
+ applicationId, "test", "default", Priority.newInstance(10), null, true, true, 2,
|
|
|
+ Resource.newInstance(10, 2), "test");
|
|
|
+ Set<String> tags = Collections.singleton("1");
|
|
|
+ appSubmissionContext.setApplicationTags(tags);
|
|
|
+
|
|
|
+ Token<AMRMTokenIdentifier> token1 = uamPool.launchUAM("SC-1", this.conf,
|
|
|
+ applicationId, "default", "test-user", "SC-HOME", true, "SC-1", appSubmissionContext);
|
|
|
+ Assert.assertNotNull(token1);
|
|
|
+
|
|
|
+ Map<String, UnmanagedApplicationManager> unmanagedAppMasterMap =
|
|
|
+ uamPool.getUnmanagedAppMasterMap();
|
|
|
+
|
|
|
+ UnmanagedApplicationManager uamApplicationManager = unmanagedAppMasterMap.get("SC-1");
|
|
|
+ Assert.assertNotNull(uamApplicationManager);
|
|
|
+
|
|
|
+ ApplicationSubmissionContext appSubmissionContextByUam =
|
|
|
+ uamApplicationManager.getApplicationSubmissionContext();
|
|
|
+
|
|
|
+ Assert.assertNotNull(appSubmissionContext);
|
|
|
+ Assert.assertEquals(10, appSubmissionContextByUam.getPriority().getPriority());
|
|
|
+ Assert.assertEquals("test", appSubmissionContextByUam.getApplicationType());
|
|
|
+ Assert.assertEquals(1, appSubmissionContextByUam.getApplicationTags().size());
|
|
|
+
|
|
|
+ uamPool.stop();
|
|
|
+ Thread finishApplicationThread = uamPool.getFinishApplicationThread();
|
|
|
+ GenericTestUtils.waitFor(() -> !finishApplicationThread.isAlive(),
|
|
|
+ 100, 2000);
|
|
|
+ Assert.assertEquals(0, unmanagedAppMasterMap.size());
|
|
|
+ }
|
|
|
}
|