|
@@ -64,6 +64,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppMetrics;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppRecoverEvent;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppRecoverEvent;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptImpl;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptImpl;
|
|
|
|
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerUtils;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerUtils;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.YarnScheduler;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.YarnScheduler;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CSQueue;
|
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CSQueue;
|
|
@@ -371,7 +372,7 @@ public class RMAppManager implements EventHandler<RMAppManagerEvent>,
|
|
// Passing start time as -1. It will be eventually set in RMAppImpl
|
|
// Passing start time as -1. It will be eventually set in RMAppImpl
|
|
// constructor.
|
|
// constructor.
|
|
RMAppImpl application = createAndPopulateNewRMApp(
|
|
RMAppImpl application = createAndPopulateNewRMApp(
|
|
- submissionContext, submitTime, user, false, -1);
|
|
|
|
|
|
+ submissionContext, submitTime, user, false, -1, null);
|
|
try {
|
|
try {
|
|
if (UserGroupInformation.isSecurityEnabled()) {
|
|
if (UserGroupInformation.isSecurityEnabled()) {
|
|
this.rmContext.getDelegationTokenRenewer()
|
|
this.rmContext.getDelegationTokenRenewer()
|
|
@@ -408,18 +409,22 @@ public class RMAppManager implements EventHandler<RMAppManagerEvent>,
|
|
// create and recover app.
|
|
// create and recover app.
|
|
RMAppImpl application =
|
|
RMAppImpl application =
|
|
createAndPopulateNewRMApp(appContext, appState.getSubmitTime(),
|
|
createAndPopulateNewRMApp(appContext, appState.getSubmitTime(),
|
|
- appState.getUser(), true, appState.getStartTime());
|
|
|
|
|
|
+ appState.getUser(), true, appState.getStartTime(),
|
|
|
|
+ appState.getState());
|
|
|
|
|
|
application.handle(new RMAppRecoverEvent(appId, rmState));
|
|
application.handle(new RMAppRecoverEvent(appId, rmState));
|
|
}
|
|
}
|
|
|
|
|
|
private RMAppImpl createAndPopulateNewRMApp(
|
|
private RMAppImpl createAndPopulateNewRMApp(
|
|
ApplicationSubmissionContext submissionContext, long submitTime,
|
|
ApplicationSubmissionContext submissionContext, long submitTime,
|
|
- String user, boolean isRecovery, long startTime) throws YarnException {
|
|
|
|
|
|
+ String user, boolean isRecovery, long startTime,
|
|
|
|
+ RMAppState recoveredFinalState) throws YarnException {
|
|
|
|
|
|
- ApplicationPlacementContext placementContext =
|
|
|
|
- placeApplication(rmContext.getQueuePlacementManager(),
|
|
|
|
- submissionContext, user, isRecovery);
|
|
|
|
|
|
+ ApplicationPlacementContext placementContext = null;
|
|
|
|
+ if (recoveredFinalState == null) {
|
|
|
|
+ placementContext = placeApplication(rmContext.getQueuePlacementManager(),
|
|
|
|
+ submissionContext, user, isRecovery);
|
|
|
|
+ }
|
|
|
|
|
|
// We only replace the queue when it's a new application
|
|
// We only replace the queue when it's a new application
|
|
if (!isRecovery) {
|
|
if (!isRecovery) {
|