@@ -89,13 +89,7 @@ func ValidatePolicy(policy config.Policy) error {
89
89
if priority .Weight <= 0 || priority .Weight >= config .MaxWeight {
90
90
validationErrors = append (validationErrors , fmt .Errorf ("Priority %s should have a positive weight applied to it or it has overflown" , priority .Name ))
91
91
}
92
-
93
- validationErrors = append (validationErrors , validatePriorityRedeclared (priorities , priority ))
94
- }
95
-
96
- predicates := make (map [string ]config.PredicatePolicy , len (policy .Predicates ))
97
- for _ , predicate := range policy .Predicates {
98
- validationErrors = append (validationErrors , validatePredicateRedeclared (predicates , predicate ))
92
+ validationErrors = append (validationErrors , validateCustomPriorities (priorities , priority ))
99
93
}
100
94
101
95
binders := 0
@@ -124,44 +118,43 @@ func ValidatePolicy(policy config.Policy) error {
124
118
return utilerrors .NewAggregate (validationErrors )
125
119
}
126
120
127
- // validatePriorityRedeclared checks if any custom priorities have been declared multiple times in the policy config
128
- // by examining the specified priority arguments
129
- func validatePriorityRedeclared (priorities map [string ]config.PriorityPolicy , priority config.PriorityPolicy ) error {
130
- var priorityType string
131
- if priority .Argument != nil {
132
- if priority .Argument .LabelPreference != nil {
133
- priorityType = "LabelPreference"
134
- } else if priority .Argument .RequestedToCapacityRatioArguments != nil {
135
- priorityType = "RequestedToCapacityRatioArguments"
136
- } else if priority .Argument .ServiceAntiAffinity != nil {
137
- priorityType = "ServiceAntiAffinity"
138
- } else {
139
- return fmt .Errorf ("No priority arguments set for priority %s" , priority .Name )
121
+ // validateCustomPriorities validates that:
122
+ // 1. RequestedToCapacityRatioRedeclared custom priority cannot be declared multiple times,
123
+ // 2. LabelPreference/ServiceAntiAffinity custom priorities can be declared multiple times,
124
+ // however the weights for each custom priority type should be the same.
125
+ func validateCustomPriorities (priorities map [string ]config.PriorityPolicy , priority config.PriorityPolicy ) error {
126
+ verifyRedeclaration := func (priorityType string ) error {
127
+ if existing , alreadyDeclared := priorities [priorityType ]; alreadyDeclared {
128
+ return fmt .Errorf ("Priority %q redeclares custom priority %q, from:%q" , priority .Name , priorityType , existing .Name )
140
129
}
130
+ priorities [priorityType ] = priority
131
+ return nil
132
+ }
133
+ verifyDifferentWeights := func (priorityType string ) error {
141
134
if existing , alreadyDeclared := priorities [priorityType ]; alreadyDeclared {
142
- return fmt .Errorf ("Priority '%s' redeclares custom priority '%s', from:'%s'" , priority .Name , priorityType , existing .Name )
135
+ if existing .Weight != priority .Weight {
136
+ return fmt .Errorf ("%s priority %q has a different weight with %q" , priorityType , priority .Name , existing .Name )
137
+ }
143
138
}
144
139
priorities [priorityType ] = priority
140
+ return nil
145
141
}
146
- return nil
147
- }
148
-
149
- // validatePredicateRedeclared checks if any custom predicates have been declared multiple times in the policy config
150
- // by examining the specified predicate arguments
151
- func validatePredicateRedeclared (predicates map [string ]config.PredicatePolicy , predicate config.PredicatePolicy ) error {
152
- var predicateType string
153
- if predicate .Argument != nil {
154
- if predicate .Argument .LabelsPresence != nil {
155
- predicateType = "LabelsPresence"
156
- } else if predicate .Argument .ServiceAffinity != nil {
157
- predicateType = "ServiceAffinity"
142
+ if priority .Argument != nil {
143
+ if priority .Argument .LabelPreference != nil {
144
+ if err := verifyDifferentWeights ("LabelPreference" ); err != nil {
145
+ return err
146
+ }
147
+ } else if priority .Argument .ServiceAntiAffinity != nil {
148
+ if err := verifyDifferentWeights ("ServiceAntiAffinity" ); err != nil {
149
+ return err
150
+ }
151
+ } else if priority .Argument .RequestedToCapacityRatioArguments != nil {
152
+ if err := verifyRedeclaration ("RequestedToCapacityRatio" ); err != nil {
153
+ return err
154
+ }
158
155
} else {
159
- return fmt .Errorf ("No priority arguments set for priority %s" , predicate .Name )
160
- }
161
- if existing , alreadyDeclared := predicates [predicateType ]; alreadyDeclared {
162
- return fmt .Errorf ("Predicate '%s' redeclares custom predicate '%s', from:'%s'" , predicate .Name , predicateType , existing .Name )
156
+ return fmt .Errorf ("No priority arguments set for priority %s" , priority .Name )
163
157
}
164
- predicates [predicateType ] = predicate
165
158
}
166
159
return nil
167
160
}
0 commit comments