From 6f0010d16e0f0f8a7e364be85e8007679fad1d56 Mon Sep 17 00:00:00 2001 From: Daniel Peach Date: Wed, 12 Apr 2017 14:29:25 -0400 Subject: [PATCH] fix(appengine): capacity values for automatic scaling (#1568) --- .../model/AppengineServerGroup.groovy | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/clouddriver-appengine/src/main/groovy/com/netflix/spinnaker/clouddriver/appengine/model/AppengineServerGroup.groovy b/clouddriver-appengine/src/main/groovy/com/netflix/spinnaker/clouddriver/appengine/model/AppengineServerGroup.groovy index 79822f4e74e..e09742f3f44 100644 --- a/clouddriver-appengine/src/main/groovy/com/netflix/spinnaker/clouddriver/appengine/model/AppengineServerGroup.groovy +++ b/clouddriver-appengine/src/main/groovy/com/netflix/spinnaker/clouddriver/appengine/model/AppengineServerGroup.groovy @@ -88,10 +88,8 @@ class AppengineServerGroup implements ServerGroup, Serializable { * For the flexible environment, a version using automatic scaling can be stopped. * A stopped version scales down to zero instances and ignores its scaling policy. * */ - def min = servingStatus == ServingStatus.SERVING ? - [scalingPolicy.minTotalInstances, scalingPolicy.minIdleInstances].max() : 0 - def max = servingStatus == ServingStatus.SERVING ? - [scalingPolicy.maxTotalInstances, scalingPolicy.maxIdleInstances, instanceCount].max() : instanceCount + def min = computeMinForAutomaticScaling(scalingPolicy) + def max = computeMaxForAutomaticScaling(scalingPolicy) return new ServerGroup.Capacity(min: min, max: max, desired: min) @@ -114,6 +112,26 @@ class AppengineServerGroup implements ServerGroup, Serializable { } } + Integer computeMinForAutomaticScaling(AppengineScalingPolicy scalingPolicy) { + Integer instanceCount = instances?.size() ?: 0 + if (servingStatus == ServingStatus.SERVING) { + def candidateMinValues = [scalingPolicy.minIdleInstances, scalingPolicy.minTotalInstances, instanceCount].findAll { it != null } + return candidateMinValues.min() + } else { + return 0 + } + } + + Integer computeMaxForAutomaticScaling(AppengineScalingPolicy scalingPolicy) { + Integer instanceCount = instances?.size() ?: 0 + if (servingStatus == ServingStatus.SERVING) { + def candidateMaxValues = [scalingPolicy.maxIdleInstances, scalingPolicy.maxTotalInstances, instanceCount].findAll { it != null } + return candidateMaxValues.max() + } else { + return instanceCount + } + } + static Boolean versionAllowsGradualTrafficMigration(Version version) { // Versions do not always have an env property if they are in the standard environment. def inStandardEnvironment = version.getEnv()?.toUpperCase() != "FLEXIBLE"