@@ -187,18 +187,36 @@ func ResourceRequirements(req router.Request, app *v1.AppInstance, containerName
187187 }
188188 }
189189
190- memoryQuantity , err := v1 .ValidateMemory (app .Spec .Memory , containerName , container , memDefault , memMax )
190+ memoryLimit , err := v1 .ValidateMemory (app .Spec .Memory , containerName , container , memDefault , memMax )
191191 if err != nil {
192192 return nil , err
193193 }
194194
195- if memoryQuantity .Value () != 0 {
196- requirements .Requests [corev1 .ResourceMemory ] = memoryQuantity
197- requirements .Limits [corev1 .ResourceMemory ] = memoryQuantity
195+ // Figure out the scaled value of memory to request based on the compute class
196+ memoryRequest := memoryLimit .DeepCopy ()
197+ if computeClass != nil && computeClass .Memory .RequestScaler != 0 {
198+ // The following line should hold up without loss of precision up to 4 petabytes
199+ memoryRequest .Set (int64 (memoryLimit .AsApproximateFloat64 () * computeClass .Memory .RequestScaler ))
200+
201+ // Never allocate less than the defined minimum of the compute class
202+ if computeClass .Memory .Min != "" && computeClass .Memory .Min != "0" {
203+ minValue , err := resource .ParseQuantity (computeClass .Memory .Min )
204+ if err != nil {
205+ return nil , err
206+ }
207+ if minValue .Cmp (memoryRequest ) == 1 {
208+ memoryRequest = minValue
209+ }
210+ }
211+ }
212+
213+ if memoryLimit .Value () != 0 {
214+ requirements .Requests [corev1 .ResourceMemory ] = memoryRequest
215+ requirements .Limits [corev1 .ResourceMemory ] = memoryLimit
198216 }
199217
200218 if computeClass != nil {
201- cpuQuantity , err := computeclasses .CalculateCPU (* computeClass , memDefault , memoryQuantity )
219+ cpuQuantity , err := computeclasses .CalculateCPU (* computeClass , memDefault , memoryRequest )
202220 if err != nil {
203221 return nil , err
204222 }
0 commit comments