mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
Merge pull request #80395 from Huang-Wei/cleanup-eps-validation
Optimize logic in EvenPodsSpread API validation
This commit is contained in:
commit
6c0c167829
@ -5698,16 +5698,10 @@ var (
|
||||
supportedScheduleActions = sets.NewString(string(core.DoNotSchedule), string(core.ScheduleAnyway))
|
||||
)
|
||||
|
||||
type spreadConstraintPair struct {
|
||||
topologyKey string
|
||||
whenUnsatisfiable core.UnsatisfiableConstraintAction
|
||||
}
|
||||
|
||||
// validateTopologySpreadConstraints validates given TopologySpreadConstraints.
|
||||
func validateTopologySpreadConstraints(constraints []core.TopologySpreadConstraint, fldPath *field.Path) field.ErrorList {
|
||||
allErrs := field.ErrorList{}
|
||||
|
||||
var existingConstraintPairs []spreadConstraintPair
|
||||
for i, constraint := range constraints {
|
||||
subFldPath := fldPath.Index(i)
|
||||
if err := ValidateMaxSkew(subFldPath.Child("maxSkew"), constraint.MaxSkew); err != nil {
|
||||
@ -5720,14 +5714,8 @@ func validateTopologySpreadConstraints(constraints []core.TopologySpreadConstrai
|
||||
allErrs = append(allErrs, err)
|
||||
}
|
||||
// tuple {topologyKey, whenUnsatisfiable} denotes one kind of spread constraint
|
||||
pair := spreadConstraintPair{
|
||||
topologyKey: constraint.TopologyKey,
|
||||
whenUnsatisfiable: constraint.WhenUnsatisfiable,
|
||||
}
|
||||
if err := ValidateSpreadConstraintPair(subFldPath.Child("{topologyKey, whenUnsatisfiable}"), pair, existingConstraintPairs); err != nil {
|
||||
if err := ValidateSpreadConstraintNotRepeat(subFldPath.Child("{topologyKey, whenUnsatisfiable}"), constraint, constraints[i+1:]); err != nil {
|
||||
allErrs = append(allErrs, err)
|
||||
} else {
|
||||
existingConstraintPairs = append(existingConstraintPairs, pair)
|
||||
}
|
||||
}
|
||||
|
||||
@ -5758,12 +5746,13 @@ func ValidateWhenUnsatisfiable(fldPath *field.Path, action core.UnsatisfiableCon
|
||||
return nil
|
||||
}
|
||||
|
||||
// ValidateSpreadConstraintPair tests that if `pair` exists in `existingConstraintPairs`.
|
||||
func ValidateSpreadConstraintPair(fldPath *field.Path, pair spreadConstraintPair, existingConstraintPairs []spreadConstraintPair) *field.Error {
|
||||
for _, existingPair := range existingConstraintPairs {
|
||||
if pair.topologyKey == existingPair.topologyKey &&
|
||||
pair.whenUnsatisfiable == existingPair.whenUnsatisfiable {
|
||||
return field.Duplicate(fldPath, pair)
|
||||
// ValidateSpreadConstraintNotRepeat tests that if `constraint` duplicates with `existingConstraintPairs`
|
||||
// on TopologyKey and WhenUnsatisfiable fields.
|
||||
func ValidateSpreadConstraintNotRepeat(fldPath *field.Path, constraint core.TopologySpreadConstraint, restingConstraints []core.TopologySpreadConstraint) *field.Error {
|
||||
for _, restingConstraint := range restingConstraints {
|
||||
if constraint.TopologyKey == restingConstraint.TopologyKey &&
|
||||
constraint.WhenUnsatisfiable == restingConstraint.WhenUnsatisfiable {
|
||||
return field.Duplicate(fldPath, fmt.Sprintf("{%v, %v}", constraint.TopologyKey, constraint.WhenUnsatisfiable))
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
Loading…
Reference in New Issue
Block a user