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

Commit 7515a20

Browse files
authored
Merge pull request #2478 from tylerslaton/fix-all-cc
2 parents 8cedbfc + e4c7abc commit 7515a20

File tree

5 files changed

+139
-4
lines changed

5 files changed

+139
-4
lines changed

pkg/controller/quota/quota.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,28 +132,32 @@ func addContainers(containers map[string]v1.Container, quotaRequest *adminv1.Quo
132132
func addCompute(containers map[string]v1.Container, appInstance *v1.AppInstance, quotaRequest *adminv1.QuotaRequestInstance) {
133133
// For each workload, add their memory/cpu requests to the quota request
134134
for name, container := range containers {
135-
var cpu, memory resource.Quantity
135+
var (
136+
cpu, memory resource.Quantity
137+
computeClass string
138+
)
139+
136140
if specific, ok := appInstance.Status.ResolvedOfferings.Containers[name]; ok {
137141
memory = *resource.NewQuantity(z.Dereference(specific.Memory), resource.BinarySI)
138142
cpu = *resource.NewMilliQuantity(z.Dereference(specific.CPU), resource.DecimalSI)
143+
computeClass = specific.Class
139144
} else if all, ok := appInstance.Status.ResolvedOfferings.Containers[""]; ok {
140145
cpu = *resource.NewMilliQuantity(z.Dereference(all.CPU), resource.DecimalSI)
141146
memory = *resource.NewQuantity(z.Dereference(all.Memory), resource.BinarySI)
147+
computeClass = all.Class
142148
}
143149

144150
// Multiply the memory/cpu requests by the scale of the container
145151
cpu.Mul(replicas(container.Scale))
146152
memory.Mul(replicas(container.Scale))
147153

148154
// Add the compute resources to the quota request
149-
computeClass := appInstance.Status.ResolvedOfferings.Containers[name].Class
150155
quotaRequest.Spec.Resources.Add(adminv1.QuotaRequestResources{BaseResources: adminv1.BaseResources{ComputeClasses: adminv1.ComputeClassResources{
151156
computeClass: {
152157
Memory: memory,
153158
CPU: cpu,
154159
},
155-
},
156-
}})
160+
}}})
157161

158162
// Recurse over any sidecars. Since sidecars can't have sidecars, this is safe.
159163
addCompute(container.Sidecars, appInstance, quotaRequest)

pkg/controller/quota/quota_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ func TestBasic(t *testing.T) {
1111
tester.DefaultTest(t, scheme.Scheme, "testdata/basic", EnsureQuotaRequest)
1212
}
1313

14+
// TestAllSet simulates a secenario where the resolvedOfferings field does not have
15+
// any usage set for containers, just all.
16+
func TestOnlyAllSet(t *testing.T) {
17+
tester.DefaultTest(t, scheme.Scheme, "testdata/only-all-set", EnsureQuotaRequest)
18+
}
19+
1420
func TestNotEnforced(t *testing.T) {
1521
tester.DefaultTest(t, scheme.Scheme, "testdata/not-enforced", EnsureQuotaRequest)
1622
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
kind: ProjectInstance
2+
apiVersion: internal.acorn.io/v1
3+
metadata:
4+
name: app-namespace
5+
annotations:
6+
acorn.io/enforced-quota: "true"
7+
spec: {}
8+
status:
9+
defaultRegion: local
10+
supportedRegions:
11+
- local
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
`apiVersion: internal.admin.acorn.io/v1
2+
kind: QuotaRequestInstance
3+
metadata:
4+
annotations:
5+
acorn.io/app-generation: "0"
6+
creationTimestamp: null
7+
name: app-name
8+
namespace: app-namespace
9+
spec:
10+
resources:
11+
apps: 0
12+
computeClasses:
13+
default-compute-class:
14+
cpu: 250m
15+
memory: 1Gi
16+
containers: 1
17+
images: 0
18+
jobs: 1
19+
secrets: 1
20+
volumeClasses:
21+
default-volume-class:
22+
volumeStorage: 10G
23+
volumes: 1
24+
status:
25+
allocatedResources:
26+
apps: 0
27+
computeClasses: null
28+
containers: 0
29+
images: 0
30+
jobs: 0
31+
secrets: 0
32+
volumeClasses: null
33+
volumes: 0
34+
`
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
kind: AppInstance
2+
apiVersion: internal.acorn.io/v1
3+
metadata:
4+
name: app-name
5+
namespace: app-namespace
6+
uid: 1234567890abcdef
7+
spec:
8+
image: image-name
9+
computeClass:
10+
"": default-compute-class
11+
status:
12+
observedGeneration: 1
13+
namespace: app-created-namespace
14+
appImage:
15+
id: test
16+
appSpec:
17+
containers:
18+
container-name:
19+
sidecars:
20+
sidecar-name:
21+
image: "image-name"
22+
ports:
23+
- port: 90
24+
targetPort: 91
25+
protocol: tcp
26+
ports:
27+
- port: 80
28+
targetPort: 81
29+
protocol: http
30+
image: "image-name"
31+
build:
32+
dockerfile: "Dockerfile"
33+
context: "."
34+
jobs:
35+
job-name:
36+
ports:
37+
- port: 80
38+
targetPort: 81
39+
protocol: http
40+
image: "image-name"
41+
build:
42+
dockerfile: "Dockerfile"
43+
context: "."
44+
secrets:
45+
test:
46+
params:
47+
characters: bcdfghjklmnpqrstvwxz2456789
48+
length: 54
49+
type: token
50+
volumes:
51+
test:
52+
accessModes:
53+
- readWriteOnce
54+
resolvedOfferings:
55+
containers:
56+
"":
57+
class: default-compute-class
58+
cpu: 125
59+
memory: 536870912
60+
# simulating a bug where the container and sidecar do not have
61+
# a resolved offering
62+
volumes:
63+
test:
64+
class: default-volume-class
65+
size: 536870912
66+
scheduling:
67+
container-name:
68+
requirements:
69+
limits:
70+
memory: 512Mi
71+
requests:
72+
cpu: 75m
73+
memory: 128Mi # simulate requestScaler
74+
sidecar-name:
75+
requirements:
76+
limits:
77+
memory: 512Mi
78+
requests:
79+
cpu: 75m
80+
memory: 128Mi # simulate requestScaler

0 commit comments

Comments
 (0)