@@ -74,61 +74,71 @@ func resolveComputeClasses(req router.Request, cfg *apiv1.Config, appInstance *v
74
74
75
75
func resolveComputeClass (req router.Request , appInstance * v1.AppInstance , configDefault * int64 , defaultCC * adminv1.ProjectComputeClassInstance , defaultCCName string , containers map [string ]v1.Container ) error {
76
76
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 )
82
78
if err != nil {
83
79
return err
84
80
}
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
94
82
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 )
111
85
if err != nil {
112
86
return err
113
87
}
114
- def := parsedMemory .Def .Value ()
115
- memory = & def
88
+ appInstance .Status .ResolvedOfferings .Containers [sidecarName ] = resolvedOfferingsSidecar
116
89
}
90
+ }
117
91
118
- appInstance .Status .ResolvedOfferings .Containers [name ] = v1.ContainerResolvedOffering {
119
- Class : ccName ,
120
- Memory : memory ,
121
- CPUScaler : cpuScaler ,
122
- }
92
+ return nil
93
+ }
123
94
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
130
134
}
135
+ def := parsedMemory .Def .Value ()
136
+ memory = & def
131
137
}
132
138
133
- return nil
139
+ return v1.ContainerResolvedOffering {
140
+ Class : ccName ,
141
+ Memory : memory ,
142
+ CPUScaler : cpuScaler ,
143
+ }, nil
134
144
}
0 commit comments