in pkg/appmgmt/general/podevent_handler.go [117:156]
func (p *PodEventHandler) addPod(pod *v1.Pod, eventSource EventSource) interfaces.ManagedApp {
recovery := eventSource == Recovery
var managedApp interfaces.ManagedApp
var appExists bool
// add app
if appMeta, ok := getAppMetadata(pod, recovery); ok {
// check if app already exist
if app := p.amProtocol.GetApplication(appMeta.ApplicationID); app == nil {
managedApp = p.amProtocol.AddApplication(&interfaces.AddApplicationRequest{
Metadata: appMeta,
})
} else {
managedApp = app
appExists = true
}
}
// add task
if taskMeta, ok := getTaskMetadata(pod); ok {
if app := p.amProtocol.GetApplication(taskMeta.ApplicationID); app != nil {
if _, taskErr := app.GetTask(string(pod.UID)); taskErr != nil {
p.amProtocol.AddTask(&interfaces.AddTaskRequest{
Metadata: taskMeta,
})
}
}
}
// only trigger recovery once - if appExists = true, it means we already
// called TriggerAppRecovery()
if recovery && !appExists {
err := managedApp.TriggerAppRecovery()
if err != nil {
log.Log(log.ShimAppMgmtGeneral).Error("failed to recover app", zap.Error(err))
}
}
return managedApp
}