in pkg/scheduler/ugm/manager.go [131:193]
func (m *Manager) DecreaseTrackedResource(queuePath, applicationID string, usage *resources.Resource, user security.UserGroup, removeApp bool) {
log.Log(log.SchedUGM).Debug("Decreasing resource usage",
zap.String("user", user.User),
zap.String("queue path", queuePath),
zap.String("application", applicationID),
zap.Stringer("resource", usage),
zap.Bool("removeApp", removeApp))
if queuePath == common.Empty || applicationID == common.Empty || usage == nil || user.User == common.Empty {
log.Log(log.SchedUGM).Debug("Mandatory parameters are missing to decrease the resource usage")
return
}
userTracker := m.GetUserTracker(user.User)
if userTracker == nil {
log.Log(log.SchedUGM).Error("user tracker must be available in userTrackers map",
zap.String("user", user.User))
return
}
// get the group now as the decrease might remove the app from the user if removeApp is true
appGroup := userTracker.getGroupForApp(applicationID)
log.Log(log.SchedUGM).Debug("Decreasing resource usage for user",
zap.String("user", user.User),
zap.String("queue path", queuePath),
zap.String("application", applicationID),
zap.String("group", appGroup),
zap.Stringer("resource", usage),
zap.Bool("removeApp", removeApp))
if userTracker.decreaseTrackedResource(queuePath, applicationID, usage, removeApp) {
log.Log(log.SchedUGM).Info("Removing user from manager",
zap.String("user", user.User))
m.Lock()
delete(m.userTrackers, user.User)
m.Unlock()
}
// if the app did not have a group we're done otherwise update the groupTracker
if appGroup == common.Empty {
return
}
groupTracker := m.GetGroupTracker(appGroup)
if groupTracker == nil {
log.Log(log.SchedUGM).Error("group tracker should be available in groupTrackers map",
zap.String("application", applicationID),
zap.String("group", appGroup))
return
}
log.Log(log.SchedUGM).Debug("Decreasing resource usage for group",
zap.String("group", appGroup),
zap.String("queue path", queuePath),
zap.String("application", applicationID),
zap.Stringer("resource", usage),
zap.Bool("removeApp", removeApp))
if groupTracker.decreaseTrackedResource(queuePath, applicationID, usage, removeApp) {
log.Log(log.SchedUGM).Info("Removing group from manager",
zap.String("group", appGroup),
zap.String("queue path", queuePath),
zap.String("application", applicationID),
zap.Bool("removeApp", removeApp))
m.Lock()
delete(m.groupTrackers, appGroup)
m.Unlock()
}
}