mirror of
https://github.com/openfaas/faas.git
synced 2025-06-09 16:56:47 +00:00
Update for scaling edge-case
- as reported on Slack and in issue #931 the gateway scaling code was scaling to zero replicas as a result of the "proportional scaling" added by @Templum's PR. This commit added a failing test which was fixed by adding boundary checking - now if the scaling amount is "0" we keep the current amount of replicas. Signed-off-by: Alex Ellis (VMware) <alexellis2@gmail.com>
This commit is contained in:
parent
4a6c6afe94
commit
f5939c9a60
@ -5,12 +5,11 @@ package handlers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/openfaas/faas/gateway/requests"
|
"github.com/openfaas/faas/gateway/requests"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -119,7 +118,7 @@ func CalculateReplicas(status string, currentReplicas uint64, maxReplicas uint64
|
|||||||
newReplicas := currentReplicas
|
newReplicas := currentReplicas
|
||||||
step := uint64((float64(maxReplicas) / 100) * float64(scalingFactor))
|
step := uint64((float64(maxReplicas) / 100) * float64(scalingFactor))
|
||||||
|
|
||||||
if status == "firing" {
|
if status == "firing" && step > 0 {
|
||||||
if currentReplicas == 1 {
|
if currentReplicas == 1 {
|
||||||
newReplicas = step
|
newReplicas = step
|
||||||
} else {
|
} else {
|
||||||
|
@ -11,8 +11,8 @@ func TestDisabledScale(t *testing.T) {
|
|||||||
minReplicas := uint64(1)
|
minReplicas := uint64(1)
|
||||||
scalingFactor := uint64(0)
|
scalingFactor := uint64(0)
|
||||||
newReplicas := CalculateReplicas("firing", DefaultMinReplicas, DefaultMaxReplicas, minReplicas, scalingFactor)
|
newReplicas := CalculateReplicas("firing", DefaultMinReplicas, DefaultMaxReplicas, minReplicas, scalingFactor)
|
||||||
if newReplicas != 0 {
|
if newReplicas != minReplicas {
|
||||||
t.Log("Expected not to scale")
|
t.Logf("Expected not to scale, but replicas were: %d", newReplicas)
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -27,6 +27,17 @@ func TestParameterEdge(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestScalingWithSameUpperLowerLimit(t *testing.T) {
|
||||||
|
minReplicas := uint64(1)
|
||||||
|
scalingFactor := uint64(20)
|
||||||
|
// status string, currentReplicas uint64, maxReplicas uint64, minReplicas uint64, scalingFactor uint64)
|
||||||
|
newReplicas := CalculateReplicas("firing", minReplicas, minReplicas, minReplicas, scalingFactor)
|
||||||
|
if newReplicas != 1 {
|
||||||
|
t.Logf("Replicas - want: %d, got: %d", minReplicas, newReplicas)
|
||||||
|
t.Fail()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestMaxScale(t *testing.T) {
|
func TestMaxScale(t *testing.T) {
|
||||||
minReplicas := uint64(1)
|
minReplicas := uint64(1)
|
||||||
scalingFactor := uint64(100)
|
scalingFactor := uint64(100)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user