in pkg/scheduler/ugm/manager.go [335:404]
func (m *Manager) internalProcessConfig(cur configs.QueueConfig, queuePath string, newUserLimits map[string]map[string]*LimitConfig, newGroupLimits map[string]map[string]*LimitConfig,
newUserWildCardLimitsConfig map[string]*LimitConfig, newGroupWildCardLimitsConfig map[string]*LimitConfig, newConfiguredGroups map[string][]string) error {
// Traverse limits of specific queue path
for _, limit := range cur.Limits {
var maxResource *resources.Resource
var err error
if maxResource, err = resources.NewResourceFromConf(limit.MaxResources); err != nil {
log.Log(log.SchedUGM).Warn("Problem in using the limit max resources settings.",
zap.String("queue path", queuePath),
zap.Any("limit max resources", limit.MaxResources),
zap.Error(err))
return errors.Join(fmt.Errorf("problem in using the max resources settings for queuepath: %s, reason: ", queuePath), err)
}
limitConfig := &LimitConfig{maxResources: maxResource, maxApplications: limit.MaxApplications}
for _, user := range limit.Users {
if user == common.Empty {
continue
}
log.Log(log.SchedUGM).Debug("Processing user limits configuration",
zap.String("user", user),
zap.String("limit", limit.Limit),
zap.String("queue path", queuePath),
zap.Uint64("max application", limit.MaxApplications),
zap.Any("max resources", limit.MaxResources))
if user == common.Wildcard {
newUserWildCardLimitsConfig[queuePath] = limitConfig
continue
}
if err := m.setUserLimits(user, limitConfig, queuePath); err != nil {
return err
}
if _, ok := newUserLimits[queuePath]; !ok {
newUserLimits[queuePath] = make(map[string]*LimitConfig)
}
newUserLimits[queuePath][user] = limitConfig
}
for _, group := range limit.Groups {
if group == common.Empty {
continue
}
log.Log(log.SchedUGM).Debug("Processing group limits configuration",
zap.String("group", group),
zap.String("limit", limit.Limit),
zap.String("queue path", queuePath),
zap.Uint64("max application", limit.MaxApplications),
zap.Any("max resources", limit.MaxResources))
if err := m.setGroupLimits(group, limitConfig, queuePath); err != nil {
return err
}
if _, ok := newGroupLimits[queuePath]; !ok {
newGroupLimits[queuePath] = make(map[string]*LimitConfig)
}
newGroupLimits[queuePath][group] = limitConfig
if group == common.Wildcard {
newGroupWildCardLimitsConfig[queuePath] = limitConfig
} else {
newConfiguredGroups[queuePath] = append(newConfiguredGroups[queuePath], group)
}
}
}
if len(cur.Queues) > 0 {
for _, child := range cur.Queues {
childQueuePath := queuePath + configs.DOT + child.Name
if err := m.internalProcessConfig(child, childQueuePath, newUserLimits, newGroupLimits, newUserWildCardLimitsConfig, newGroupWildCardLimitsConfig, newConfiguredGroups); err != nil {
return err
}
}
}
return nil
}