diff --git a/gateway/handlers/alerthandler.go b/gateway/handlers/alerthandler.go index 4eac2370..11d08116 100644 --- a/gateway/handlers/alerthandler.go +++ b/gateway/handlers/alerthandler.go @@ -8,6 +8,7 @@ import ( "fmt" "io/ioutil" "log" + "math" "net/http" "github.com/openfaas/faas/gateway/requests" @@ -97,7 +98,7 @@ func scaleService(alert requests.PrometheusInnerAlert, service scaling.ServiceQu // CalculateReplicas decides what replica count to set depending on current/desired amount func CalculateReplicas(status string, currentReplicas uint64, maxReplicas uint64, minReplicas uint64, scalingFactor uint64) uint64 { newReplicas := currentReplicas - step := uint64((float64(maxReplicas) / 100) * float64(scalingFactor)) + step := uint64(math.Ceil(float64(maxReplicas) / 100 * float64(scalingFactor))) if status == "firing" && step > 0 { if currentReplicas+step > maxReplicas { diff --git a/gateway/handlers/alerthandler_test.go b/gateway/handlers/alerthandler_test.go index eb9bd3fd..561aca2d 100644 --- a/gateway/handlers/alerthandler_test.go +++ b/gateway/handlers/alerthandler_test.go @@ -110,3 +110,14 @@ func TestScaledUpFrom1(t *testing.T) { t.Fail() } } + +func TestScaledUpWithSmallParam(t *testing.T) { + currentReplicas := uint64(1) + maxReplicas := uint64(4) + scalingFactor := uint64(1) + newReplicas := CalculateReplicas("firing", currentReplicas, maxReplicas, scaling.DefaultMinReplicas, scalingFactor) + if newReplicas == currentReplicas { + t.Log("Expected newReplicas > currentReplica") + t.Fail() + } +}