diff --git a/utils/replicaset/canary.go b/utils/replicaset/canary.go index 89ba648cf2..cf41e6baa5 100755 --- a/utils/replicaset/canary.go +++ b/utils/replicaset/canary.go @@ -383,7 +383,7 @@ func CalculateReplicaCountsForTrafficRoutedCanary(rollout *v1alpha1.Rollout, wei // trafficWeightToReplicas returns the appropriate replicas given the full spec.replicas and a weight // Rounds up if not evenly divisible. func trafficWeightToReplicas(replicas, weight, maxWeight int32) int32 { - return int32(math.Ceil(float64(weight*replicas) / float64(maxWeight))) + return int32(math.Ceil(float64(weight) * float64(replicas) / float64(maxWeight))) } func max(left, right int32) int32 { diff --git a/utils/replicaset/canary_test.go b/utils/replicaset/canary_test.go index d1d49072e8..dbe4ce5a03 100755 --- a/utils/replicaset/canary_test.go +++ b/utils/replicaset/canary_test.go @@ -960,6 +960,7 @@ func TestTrafficWeightToReplicas(t *testing.T) { assert.Equal(t, int32(4), trafficWeightToReplicas(10, 33, 100)) assert.Equal(t, int32(10), trafficWeightToReplicas(10, 99, 100)) assert.Equal(t, int32(10), trafficWeightToReplicas(10, 100, 100)) + assert.Equal(t, int32(23), trafficWeightToReplicas(23, 100000000, 100000000)) } func TestGetOtherRSs(t *testing.T) {