in pkg/callback/scheduler_callback.go [107:162]
func (callback *AsyncRMCallback) UpdateApplication(response *si.ApplicationResponse) error {
log.Log(log.ShimRMCallback).Debug("UpdateApplication callback received",
zap.Stringer("UpdateApplicationResponse", response))
// handle new accepted apps
for _, app := range response.Accepted {
// update context
log.Log(log.ShimRMCallback).Debug("callback: response to accepted application",
zap.String("appID", app.ApplicationID))
if app := callback.context.GetApplication(app.ApplicationID); app != nil {
log.Log(log.ShimRMCallback).Info("Accepting app", zap.String("appID", app.GetApplicationID()))
ev := cache.NewSimpleApplicationEvent(app.GetApplicationID(), cache.AcceptApplication)
dispatcher.Dispatch(ev)
}
}
for _, rejectedApp := range response.Rejected {
// update context
log.Log(log.ShimRMCallback).Debug("callback: response to rejected application",
zap.String("appID", rejectedApp.ApplicationID))
if app := callback.context.GetApplication(rejectedApp.ApplicationID); app != nil {
ev := cache.NewApplicationEvent(app.GetApplicationID(), cache.RejectApplication, rejectedApp.Reason)
dispatcher.Dispatch(ev)
}
}
// handle status changes
for _, updated := range response.Updated {
log.Log(log.ShimRMCallback).Debug("status update callback received",
zap.String("appId", updated.ApplicationID),
zap.String("new status", updated.State))
switch updated.State {
case cache.ApplicationStates().Completed:
callback.context.RemoveApplicationInternal(updated.ApplicationID)
case cache.ApplicationStates().Resuming:
app := callback.context.GetApplication(updated.ApplicationID)
if app != nil && app.GetApplicationState() == cache.ApplicationStates().Reserving {
ev := cache.NewResumingApplicationEvent(updated.ApplicationID)
dispatcher.Dispatch(ev)
// handle status update
dispatcher.Dispatch(cache.NewApplicationStatusChangeEvent(updated.ApplicationID, cache.AppStateChange, updated.State))
}
default:
if updated.State == cache.ApplicationStates().Failing || updated.State == cache.ApplicationStates().Failed {
ev := cache.NewFailApplicationEvent(updated.ApplicationID, updated.Message)
dispatcher.Dispatch(ev)
}
// handle status update
dispatcher.Dispatch(cache.NewApplicationStatusChangeEvent(updated.ApplicationID, cache.AppStateChange, updated.State))
}
}
return nil
}