Modified: hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServer.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServer.java?rev=1161408&r1=1161407&r2=1161408&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServer.java (original) +++ hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServer.java Thu Aug 25 06:35:58 2011 @@ -24,6 +24,7 @@ import java.io.IOException; import java.io.Writer; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ContainerId; import org.apache.hadoop.yarn.api.records.ContainerLaunchContext; @@ -87,10 +88,13 @@ public class TestNMWebServer { when(app.getUser()).thenReturn(user); when(app.getAppId()).thenReturn(appId); nmContext.getApplications().put(appId, app); + ApplicationAttemptId appAttemptId = recordFactory.newRecordInstance(ApplicationAttemptId.class); + appAttemptId.setApplicationId(appId); + appAttemptId.setAttemptId(1); ContainerId container1 = - BuilderUtils.newContainerId(recordFactory, appId, 0); + BuilderUtils.newContainerId(recordFactory, appId, appAttemptId, 0); ContainerId container2 = - BuilderUtils.newContainerId(recordFactory, appId, 1); + BuilderUtils.newContainerId(recordFactory, appId, appAttemptId, 1); NodeManagerMetrics metrics = mock(NodeManagerMetrics.class); for (ContainerId containerId : new ContainerId[] { container1, container2}) {
Modified: hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java?rev=1161408&r1=1161407&r2=1161408&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java (original) +++ hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java Thu Aug 25 06:35:58 2011 @@ -106,9 +106,9 @@ public class RMAppImpl implements RMApp .addTransition(RMAppState.ACCEPTED, RMAppState.RUNNING, RMAppEventType.ATTEMPT_REGISTERED) .addTransition(RMAppState.ACCEPTED, - EnumSet.of(RMAppState.ACCEPTED, RMAppState.FAILED), + EnumSet.of(RMAppState.SUBMITTED, RMAppState.FAILED), RMAppEventType.ATTEMPT_FAILED, - new AttemptFailedTransition(RMAppState.ACCEPTED)) + new AttemptFailedTransition(RMAppState.SUBMITTED)) .addTransition(RMAppState.ACCEPTED, RMAppState.KILLED, RMAppEventType.KILL, new AppKilledTransition()) @@ -116,23 +116,12 @@ public class RMAppImpl implements RMApp .addTransition(RMAppState.RUNNING, RMAppState.FINISHED, RMAppEventType.ATTEMPT_FINISHED, FINAL_TRANSITION) .addTransition(RMAppState.RUNNING, - EnumSet.of(RMAppState.RUNNING, RMAppState.FAILED), + EnumSet.of(RMAppState.SUBMITTED, RMAppState.FAILED), RMAppEventType.ATTEMPT_FAILED, - new AttemptFailedTransition(RMAppState.RUNNING)) + new AttemptFailedTransition(RMAppState.SUBMITTED)) .addTransition(RMAppState.RUNNING, RMAppState.KILLED, RMAppEventType.KILL, new AppKilledTransition()) - // Transitions from RESTARTING state - // TODO - no way to get to RESTARTING state right now - .addTransition(RMAppState.RESTARTING, RMAppState.RUNNING, - RMAppEventType.ATTEMPT_REGISTERED) - .addTransition(RMAppState.RESTARTING, - EnumSet.of(RMAppState.RESTARTING, RMAppState.FAILED), - RMAppEventType.ATTEMPT_FAILED, - new AttemptFailedTransition(RMAppState.RESTARTING)) - .addTransition(RMAppState.RESTARTING, RMAppState.KILLED, - RMAppEventType.KILL, new AppKilledTransition()) - // Transitions from FINISHED state .addTransition(RMAppState.FINISHED, RMAppState.FINISHED, RMAppEventType.KILL) @@ -263,8 +252,6 @@ public class RMAppImpl implements RMApp case SUBMITTED: case ACCEPTED: return ApplicationState.SUBMITTED; - case RESTARTING: - return ApplicationState.RESTARTING; case RUNNING: return ApplicationState.RUNNING; case FINISHED: @@ -375,6 +362,21 @@ public class RMAppImpl implements RMApp } } + private void createNewAttempt() { + ApplicationAttemptId appAttemptId = Records + .newRecord(ApplicationAttemptId.class); + appAttemptId.setApplicationId(applicationId); + appAttemptId.setAttemptId(attempts.size() + 1); + + RMAppAttempt attempt = new RMAppAttemptImpl(appAttemptId, + clientTokenStr, rmContext, scheduler, masterService, + submissionContext); + attempts.put(appAttemptId, attempt); + currentAttempt = attempt; + dispatcher.getEventHandler().handle( + new RMAppAttemptEvent(appAttemptId, RMAppAttemptEventType.START)); + } + private static class RMAppTransition implements SingleArcTransition<RMAppImpl, RMAppEvent> { public void transition(RMAppImpl app, RMAppEvent event) { @@ -384,19 +386,7 @@ public class RMAppImpl implements RMApp private static final class StartAppAttemptTransition extends RMAppTransition { public void transition(RMAppImpl app, RMAppEvent event) { - - ApplicationAttemptId appAttemptId = Records - .newRecord(ApplicationAttemptId.class); - appAttemptId.setApplicationId(app.applicationId); - appAttemptId.setAttemptId(app.attempts.size() + 1); - - RMAppAttempt attempt = new RMAppAttemptImpl(appAttemptId, - app.clientTokenStr, app.rmContext, app.scheduler, - app.masterService, app.submissionContext); - app.attempts.put(appAttemptId, attempt); - app.currentAttempt = attempt; - app.dispatcher.getEventHandler().handle( - new RMAppAttemptEvent(appAttemptId, RMAppAttemptEventType.START)); + app.createNewAttempt(); }; } @@ -452,27 +442,17 @@ public class RMAppImpl implements RMApp public RMAppState transition(RMAppImpl app, RMAppEvent event) { if (app.attempts.size() == app.maxRetries) { - app.diagnostics.append("Application " + app.getApplicationId() - + " failed " + app.maxRetries - + " times. Failing the application."); + String msg = "Application " + app.getApplicationId() + + " failed " + app.maxRetries + + " times. Failing the application."; + LOG.info(msg); + app.diagnostics.append(msg); // Inform the node for app-finish FINAL_TRANSITION.transition(app, event); return RMAppState.FAILED; } - ApplicationAttemptId appAttemptId = Records - .newRecord(ApplicationAttemptId.class); - appAttemptId.setApplicationId(app.applicationId); - appAttemptId.setAttemptId(app.attempts.size() + 1); - - // Create a new attempt. - RMAppAttempt attempt = new RMAppAttemptImpl(appAttemptId, - app.clientTokenStr, app.rmContext, app.scheduler, - app.masterService, app.submissionContext); - app.attempts.put(appAttemptId, attempt); - app.currentAttempt = attempt; - app.dispatcher.getEventHandler().handle( - new RMAppAttemptEvent(appAttemptId, RMAppAttemptEventType.START)); + app.createNewAttempt(); return initialState; } Modified: hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppState.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppState.java?rev=1161408&r1=1161407&r2=1161408&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppState.java (original) +++ hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppState.java Thu Aug 25 06:35:58 2011 @@ -1,5 +1,5 @@ package org.apache.hadoop.yarn.server.resourcemanager.rmapp; public enum RMAppState { - NEW, SUBMITTED, ACCEPTED, RUNNING, RESTARTING, FINISHED, FAILED, KILLED + NEW, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED } Modified: hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java?rev=1161408&r1=1161407&r2=1161408&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java (original) +++ hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java Thu Aug 25 06:35:58 2011 @@ -18,40 +18,34 @@ package org.apache.hadoop.yarn.server.resourcemanager.rmapp; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; import java.io.IOException; -import java.lang.reflect.Method; import junit.framework.Assert; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.MockApps; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext; +import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.event.AsyncDispatcher; import org.apache.hadoop.yarn.event.Dispatcher; import org.apache.hadoop.yarn.event.EventHandler; import org.apache.hadoop.yarn.security.ApplicationTokenSecretManager; +import org.apache.hadoop.yarn.server.resourcemanager.ApplicationMasterService; import org.apache.hadoop.yarn.server.resourcemanager.RMContext; import org.apache.hadoop.yarn.server.resourcemanager.RMContextImpl; -import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp; -import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppImpl; -import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppEventType; +import org.apache.hadoop.yarn.server.resourcemanager.recovery.MemStore; +import org.apache.hadoop.yarn.server.resourcemanager.recovery.ApplicationsStore.ApplicationStore; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.AMLivelinessMonitor; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptEvent; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptEventType; -import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptImpl; -import org.apache.hadoop.yarn.server.resourcemanager.recovery.ApplicationsStore.ApplicationStore; -import org.apache.hadoop.yarn.server.resourcemanager.recovery.MemStore; import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.ContainerAllocationExpirer; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.YarnScheduler; -import org.apache.hadoop.yarn.server.resourcemanager.ApplicationMasterService; -import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -306,6 +300,9 @@ public class TestRMAppTransitions { for (int i=1; i<maxRetries; i++) { RMAppEvent event = new RMAppEvent(application.getApplicationId(), RMAppEventType.ATTEMPT_FAILED); application.handle(event); + assertAppState(RMAppState.SUBMITTED, application); + event = new RMAppEvent(application.getApplicationId(), RMAppEventType.APP_ACCEPTED); + application.handle(event); assertAppState(RMAppState.ACCEPTED, application); } @@ -342,10 +339,22 @@ public class TestRMAppTransitions { LOG.info("--- START: testAppRunningFailed ---"); RMApp application = testCreateAppRunning(); + RMAppAttempt appAttempt = application.getCurrentAppAttempt(); + int expectedAttemptId = 1; + Assert.assertEquals(expectedAttemptId, appAttempt.getAppAttemptId().getAttemptId()); // RUNNING => FAILED/RESTARTING event RMAppEventType.ATTEMPT_FAILED for (int i=1; i<maxRetries; i++) { RMAppEvent event = new RMAppEvent(application.getApplicationId(), RMAppEventType.ATTEMPT_FAILED); application.handle(event); + assertAppState(RMAppState.SUBMITTED, application); + appAttempt = application.getCurrentAppAttempt(); + Assert.assertEquals(++expectedAttemptId, + appAttempt.getAppAttemptId().getAttemptId()); + event = new RMAppEvent(application.getApplicationId(), RMAppEventType.APP_ACCEPTED); + application.handle(event); + assertAppState(RMAppState.ACCEPTED, application); + event = new RMAppEvent(application.getApplicationId(), RMAppEventType.ATTEMPT_REGISTERED); + application.handle(event); assertAppState(RMAppState.RUNNING, application); } Modified: hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/TestContainerTokenSecretManager.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/TestContainerTokenSecretManager.java?rev=1161408&r1=1161407&r2=1161408&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/TestContainerTokenSecretManager.java (original) +++ hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/TestContainerTokenSecretManager.java Thu Aug 25 06:35:58 2011 @@ -52,6 +52,7 @@ import org.apache.hadoop.yarn.api.protoc import org.apache.hadoop.yarn.api.protocolrecords.GetContainerStatusRequest; import org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterRequest; import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest; +import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ApplicationMaster; import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext; @@ -284,8 +285,12 @@ public class TestContainerTokenSecretMan .newRecordInstance(GetContainerStatusRequest.class); ContainerId containerID = recordFactory.newRecordInstance(ContainerId.class); + ApplicationAttemptId appAttemptId = recordFactory.newRecordInstance(ApplicationAttemptId.class); + appAttemptId.setApplicationId(appID); + appAttemptId.setAttemptId(1); containerID.setAppId(appID); containerID.setId(1); + containerID.setAppAttemptId(appAttemptId); request.setContainerId(containerID); client.getContainerStatus(request); } catch (YarnRemoteException e) { @@ -331,8 +336,12 @@ public class TestContainerTokenSecretMan .newRecordInstance(GetContainerStatusRequest.class); containerID = recordFactory.newRecordInstance(ContainerId.class); + ApplicationAttemptId appAttemptId = recordFactory.newRecordInstance(ApplicationAttemptId.class); + appAttemptId.setApplicationId(appID); + appAttemptId.setAttemptId(1); containerID.setAppId(appID); containerID.setId(1); + containerID.setAppAttemptId(appAttemptId); request.setContainerId(containerID); try { client.getContainerStatus(request);
