svn merge -c 1452548 FIXES: YARN-345. Many InvalidStateTransitonException errors for ApplicationImpl in Node Manager. Contributed by Robert Parker

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1452549 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jason Darrell Lowe 2013-03-04 21:54:03 +00:00
parent 31b1316edf
commit 3cfae3cc79
5 changed files with 35 additions and 7 deletions

View File

@ -347,6 +347,9 @@ Release 0.23.7 - UNRELEASED
YARN-448. Remove unnecessary hflush from log aggregation (Kihwal Lee via YARN-448. Remove unnecessary hflush from log aggregation (Kihwal Lee via
bobby) bobby)
YARN-345. Many InvalidStateTransitonException errors for ApplicationImpl
in Node Manager (Robert Parker via jlowe)
Release 0.23.6 - UNRELEASED Release 0.23.6 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -34,5 +34,6 @@ public enum ApplicationEventType {
// Source: Log Handler // Source: Log Handler
APPLICATION_LOG_HANDLING_INITED, APPLICATION_LOG_HANDLING_INITED,
APPLICATION_LOG_HANDLING_FINISHED APPLICATION_LOG_HANDLING_FINISHED,
APPLICATION_LOG_HANDLING_FAILED
} }

View File

@ -149,6 +149,9 @@ public class ApplicationImpl implements Application {
.addTransition(ApplicationState.INITING, ApplicationState.INITING, .addTransition(ApplicationState.INITING, ApplicationState.INITING,
ApplicationEventType.APPLICATION_LOG_HANDLING_INITED, ApplicationEventType.APPLICATION_LOG_HANDLING_INITED,
new AppLogInitDoneTransition()) new AppLogInitDoneTransition())
.addTransition(ApplicationState.INITING, ApplicationState.INITING,
ApplicationEventType.APPLICATION_LOG_HANDLING_FAILED,
new AppLogInitFailTransition())
.addTransition(ApplicationState.INITING, ApplicationState.RUNNING, .addTransition(ApplicationState.INITING, ApplicationState.RUNNING,
ApplicationEventType.APPLICATION_INITED, ApplicationEventType.APPLICATION_INITED,
new AppInitDoneTransition()) new AppInitDoneTransition())
@ -237,6 +240,26 @@ public class ApplicationImpl implements Application {
} }
} }
/**
* Handles the APPLICATION_LOG_HANDLING_FAILED event that occurs after
* {@link LogAggregationService} has failed to initialize the log
* aggregation service
*
* In particular, this requests that the {@link ResourceLocalizationService}
* localize the application-scoped resources.
*/
@SuppressWarnings("unchecked")
static class AppLogInitFailTransition implements
SingleArcTransition<ApplicationImpl, ApplicationEvent> {
@Override
public void transition(ApplicationImpl app, ApplicationEvent event) {
LOG.warn("Log Aggregation service failed to initialize, there will " +
"be no logs for this application");
app.dispatcher.getEventHandler().handle(
new ApplicationLocalizationEvent(
LocalizationEventType.INIT_APPLICATION_RESOURCES, app));
}
}
/** /**
* Handles INIT_CONTAINER events which request that we launch a new * Handles INIT_CONTAINER events which request that we launch a new
* container. When we're still in the INITTING state, we simply * container. When we're still in the INITTING state, we simply

View File

@ -300,8 +300,9 @@ public class LogAggregationService extends AbstractService implements
eventResponse = new ApplicationEvent(appId, eventResponse = new ApplicationEvent(appId,
ApplicationEventType.APPLICATION_LOG_HANDLING_INITED); ApplicationEventType.APPLICATION_LOG_HANDLING_INITED);
} catch (YarnException e) { } catch (YarnException e) {
eventResponse = new ApplicationFinishEvent(appId, LOG.warn("Application failed to init aggregation: " + e.getMessage());
"Application failed to init aggregation: " + e.getMessage()); eventResponse = new ApplicationEvent(appId,
ApplicationEventType.APPLICATION_LOG_HANDLING_FAILED);
} }
this.dispatcher.getEventHandler().handle(eventResponse); this.dispatcher.getEventHandler().handle(eventResponse);
} }

View File

@ -421,8 +421,8 @@ public class TestLogAggregationService extends BaseContainerManagerTest {
dispatcher.await(); dispatcher.await();
ApplicationEvent expectedEvents[] = new ApplicationEvent[]{ ApplicationEvent expectedEvents[] = new ApplicationEvent[]{
new ApplicationFinishEvent(appId, new ApplicationEvent(appId,
"Application failed to init aggregation: KABOOM!") ApplicationEventType.APPLICATION_LOG_HANDLING_FAILED)
}; };
checkEvents(appEventHandler, expectedEvents, false, checkEvents(appEventHandler, expectedEvents, false,
"getType", "getApplicationID", "getDiagnostic"); "getType", "getApplicationID", "getDiagnostic");
@ -471,8 +471,8 @@ public class TestLogAggregationService extends BaseContainerManagerTest {
dispatcher.await(); dispatcher.await();
ApplicationEvent expectedEvents[] = new ApplicationEvent[]{ ApplicationEvent expectedEvents[] = new ApplicationEvent[]{
new ApplicationFinishEvent(appId, new ApplicationEvent(appId,
"Application failed to init aggregation: "+e) ApplicationEventType.APPLICATION_LOG_HANDLING_FAILED)
}; };
checkEvents(appEventHandler, expectedEvents, false, checkEvents(appEventHandler, expectedEvents, false,
"getType", "getApplicationID", "getDiagnostic"); "getType", "getApplicationID", "getDiagnostic");