diff --git a/api/internal/scheduler/algorithm/weightDistributing/weightDistributing.go b/api/internal/scheduler/algorithm/weightDistributing/weightDistributing.go index b1fb7d80..ad592dc4 100644 --- a/api/internal/scheduler/algorithm/weightDistributing/weightDistributing.go +++ b/api/internal/scheduler/algorithm/weightDistributing/weightDistributing.go @@ -1,6 +1,7 @@ package weightDistributing import ( + "errors" "math" ) @@ -10,7 +11,7 @@ type Weight struct { Replica int32 } -func DistributeReplicas(weights []*Weight, replicas int32) { +func DistributeReplicas(weights []*Weight, replicas int32) error { var weightSum int32 weightSum = 0 @@ -18,6 +19,10 @@ func DistributeReplicas(weights []*Weight, replicas int32) { weightSum += w.Weight } + if weightSum == 0 { + return errors.New("static weights are empty") + } + weightRatio := make([]float64, len(weights)) for i, w := range weights { weightRatio[i] = float64(w.Weight) / float64(weightSum) @@ -69,4 +74,5 @@ func DistributeReplicas(weights []*Weight, replicas int32) { rest++ } } + return nil } diff --git a/api/internal/scheduler/strategy/staticWeight.go b/api/internal/scheduler/strategy/staticWeight.go index 8b3108e9..f106b608 100644 --- a/api/internal/scheduler/strategy/staticWeight.go +++ b/api/internal/scheduler/strategy/staticWeight.go @@ -35,7 +35,10 @@ func (s *StaticWeightStrategy) Schedule() ([]*AssignedCluster, error) { weights = append(weights, weight) } - weightDistributing.DistributeReplicas(weights, s.replicas) + err := weightDistributing.DistributeReplicas(weights, s.replicas) + if err != nil { + return nil, err + } var results []*AssignedCluster for _, weight := range weights {