Skip to content
This repository was archived by the owner on Mar 16, 2024. It is now read-only.

Commit 65998cf

Browse files
authored
fix: calculate resolvedOfferings for sidecars (#2451)
Signed-off-by: Grant Linville <[email protected]>
1 parent 10a81f7 commit 65998cf

File tree

9 files changed

+62
-52
lines changed

9 files changed

+62
-52
lines changed

pkg/controller/resolvedofferings/computeclass.go

+54-44
Original file line numberDiff line numberDiff line change
@@ -74,61 +74,71 @@ func resolveComputeClasses(req router.Request, cfg *apiv1.Config, appInstance *v
7474

7575
func resolveComputeClass(req router.Request, appInstance *v1.AppInstance, configDefault *int64, defaultCC *adminv1.ProjectComputeClassInstance, defaultCCName string, containers map[string]v1.Container) error {
7676
for name, container := range containers {
77-
var cpuScaler *float64
78-
ccName := ""
79-
80-
// First, get the compute class for the workload
81-
cc, err := computeclasses.GetClassForWorkload(req.Ctx, req.Client, appInstance.Spec.ComputeClasses, container, name, appInstance.Namespace)
77+
resolvedOfferings, err := resolveComputeClassForContainer(req, appInstance, configDefault, defaultCC, defaultCCName, name, container)
8278
if err != nil {
8379
return err
8480
}
85-
if cc == nil {
86-
cc = defaultCC
87-
}
88-
if cc != nil {
89-
ccName = cc.Name
90-
cpuScaler = &cc.CPUScaler
91-
} else {
92-
ccName = defaultCCName
93-
}
81+
appInstance.Status.ResolvedOfferings.Containers[name] = resolvedOfferings
9482

95-
// Next, determine the memory request. This is the order of priority:
96-
// 1. runtime-level overrides from the user (in app.Spec)
97-
// 2. defaults in the acorn image
98-
// 3. defaults from compute class
99-
// 4. global default
100-
101-
memory := configDefault // set to global default first, then check the higher priority values
102-
103-
if appInstance.Spec.Memory[name] != nil { // runtime-level overrides from the user
104-
memory = appInstance.Spec.Memory[name]
105-
} else if appInstance.Spec.Memory[""] != nil { // runtime-level overrides from the user for all containers in the app
106-
memory = appInstance.Spec.Memory[""]
107-
} else if container.Memory != nil { // defaults in the acorn image
108-
memory = container.Memory
109-
} else if cc != nil { // defaults from compute class
110-
parsedMemory, err := computeclasses.ParseComputeClassMemoryInternal(cc.Memory)
83+
for sidecarName, sidecar := range container.Sidecars {
84+
resolvedOfferingsSidecar, err := resolveComputeClassForContainer(req, appInstance, configDefault, defaultCC, defaultCCName, sidecarName, sidecar)
11185
if err != nil {
11286
return err
11387
}
114-
def := parsedMemory.Def.Value()
115-
memory = &def
88+
appInstance.Status.ResolvedOfferings.Containers[sidecarName] = resolvedOfferingsSidecar
11689
}
90+
}
11791

118-
appInstance.Status.ResolvedOfferings.Containers[name] = v1.ContainerResolvedOffering{
119-
Class: ccName,
120-
Memory: memory,
121-
CPUScaler: cpuScaler,
122-
}
92+
return nil
93+
}
12394

124-
for sidecarName := range container.Sidecars {
125-
appInstance.Status.ResolvedOfferings.Containers[sidecarName] = v1.ContainerResolvedOffering{
126-
Class: ccName,
127-
Memory: memory,
128-
CPUScaler: cpuScaler,
129-
}
95+
func resolveComputeClassForContainer(req router.Request, appInstance *v1.AppInstance, configDefault *int64, defaultCC *adminv1.ProjectComputeClassInstance, defaultCCName, containerName string, container v1.Container) (v1.ContainerResolvedOffering, error) {
96+
var (
97+
cpuScaler *float64
98+
ccName string
99+
)
100+
101+
// First, get the compute class for the workload
102+
cc, err := computeclasses.GetClassForWorkload(req.Ctx, req.Client, appInstance.Spec.ComputeClasses, container, containerName, appInstance.Namespace)
103+
if err != nil {
104+
return v1.ContainerResolvedOffering{}, err
105+
}
106+
if cc == nil {
107+
cc = defaultCC
108+
}
109+
if cc != nil {
110+
ccName = cc.Name
111+
cpuScaler = &cc.CPUScaler
112+
} else {
113+
ccName = defaultCCName
114+
}
115+
116+
// Next, determine the memory request. This is the order of priority:
117+
// 1. runtime-level overrides from the user (in app.Spec)
118+
// 2. defaults in the acorn image
119+
// 3. defaults from compute class
120+
// 4. global default
121+
122+
memory := configDefault // set to global default first, then check the higher priority values
123+
124+
if appInstance.Spec.Memory[containerName] != nil { // runtime-level overrides from the user
125+
memory = appInstance.Spec.Memory[containerName]
126+
} else if appInstance.Spec.Memory[""] != nil { // runtime-level overrides from the user for all containers in the app
127+
memory = appInstance.Spec.Memory[""]
128+
} else if container.Memory != nil { // defaults in the acorn image
129+
memory = container.Memory
130+
} else if cc != nil { // defaults from compute class
131+
parsedMemory, err := computeclasses.ParseComputeClassMemoryInternal(cc.Memory)
132+
if err != nil {
133+
return v1.ContainerResolvedOffering{}, err
130134
}
135+
def := parsedMemory.Def.Value()
136+
memory = &def
131137
}
132138

133-
return nil
139+
return v1.ContainerResolvedOffering{
140+
Class: ccName,
141+
Memory: memory,
142+
CPUScaler: cpuScaler,
143+
}, nil
134144
}

pkg/controller/resolvedofferings/testdata/computeclass/acornfile-override-compute-class/expected.golden

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ status:
5454
left:
5555
class: sample-compute-class
5656
cpuScaler: 0.25
57-
memory: 2097152
57+
memory: 1048576
5858
oneimage:
5959
class: sample-compute-class
6060
cpuScaler: 0.25

pkg/controller/resolvedofferings/testdata/computeclass/all-set-overwrite/expected.golden

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ status:
5353
"":
5454
memory: 1048576
5555
left:
56-
memory: 2097152
56+
memory: 1048576
5757
oneimage:
5858
memory: 2097152
5959
region: local

pkg/controller/resolvedofferings/testdata/computeclass/container/expected.golden

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ status:
5252
"":
5353
memory: 0
5454
left:
55-
memory: 1048576
55+
memory: 0
5656
oneimage:
5757
memory: 1048576
5858
region: local

pkg/controller/resolvedofferings/testdata/computeclass/job/expected.golden

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ status:
5252
"":
5353
memory: 0
5454
left:
55-
memory: 1048576
55+
memory: 0
5656
oneimage:
5757
memory: 1048576
5858
region: local

pkg/controller/resolvedofferings/testdata/computeclass/overwrite-acornfile-memory/expected.golden

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ status:
5353
"":
5454
memory: 0
5555
left:
56-
memory: 1048576
56+
memory: 0
5757
oneimage:
5858
memory: 1048576
5959
region: local

pkg/controller/resolvedofferings/testdata/computeclass/sidecar/expected.golden

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ status:
5252
"":
5353
memory: 0
5454
left:
55-
memory: 0
55+
memory: 1048576
5656
oneimage:
5757
memory: 0
5858
region: local

pkg/controller/resolvedofferings/testdata/computeclass/user-override-compute-class/expected.golden

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ status:
5656
left:
5757
class: sample-compute-class
5858
cpuScaler: 0.25
59-
memory: 3145728
59+
memory: 1048576
6060
oneimage:
6161
class: sample-compute-class
6262
cpuScaler: 0.25

pkg/controller/resolvedofferings/testdata/computeclass/with-acornfile-memory/expected.golden

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ status:
5151
"":
5252
memory: 0
5353
left:
54-
memory: 1048576
54+
memory: 0
5555
oneimage:
5656
memory: 1048576
5757
region: local

0 commit comments

Comments
 (0)