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

Commit 92d24ac

Browse files
authored
Merge pull request #2471 from tylerslaton/revert-cc-quota
Revert "enhancement: add ComputeClasses and VolumeClasses fields to BaseResources"
2 parents c73cd69 + 8b44ad3 commit 92d24ac

16 files changed

+412
-1708
lines changed
Lines changed: 39 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package v1
22

33
import (
4-
"errors"
54
"fmt"
65
"strings"
6+
7+
"k8s.io/apimachinery/pkg/api/resource"
78
)
89

910
// BaseResources defines resources that should be tracked at any scoped. The two main exclusions
@@ -15,10 +16,9 @@ type BaseResources struct {
1516
Volumes int `json:"volumes"`
1617
Images int `json:"images"`
1718

18-
// ComputeClasses and VolumeClasses are used to track the amount of compute and volume storage per their
19-
// respective classes
20-
ComputeClasses ComputeClassResources `json:"computeClasses"`
21-
VolumeClasses VolumeClassResources `json:"volumeClasses"`
19+
VolumeStorage resource.Quantity `json:"volumeStorage"`
20+
Memory resource.Quantity `json:"memory"`
21+
CPU resource.Quantity `json:"cpu"`
2222
}
2323

2424
// Add will add the BaseResources of another BaseResources struct into the current one.
@@ -29,14 +29,9 @@ func (current *BaseResources) Add(incoming BaseResources) {
2929
current.Volumes = Add(current.Volumes, incoming.Volumes)
3030
current.Images = Add(current.Images, incoming.Images)
3131

32-
if current.ComputeClasses == nil {
33-
current.ComputeClasses = ComputeClassResources{}
34-
}
35-
if current.VolumeClasses == nil {
36-
current.VolumeClasses = VolumeClassResources{}
37-
}
38-
current.ComputeClasses.Add(incoming.ComputeClasses)
39-
current.VolumeClasses.Add(incoming.VolumeClasses)
32+
current.VolumeStorage = AddQuantity(current.VolumeStorage, incoming.VolumeStorage)
33+
current.Memory = AddQuantity(current.Memory, incoming.Memory)
34+
current.CPU = AddQuantity(current.CPU, incoming.CPU)
4035
}
4136

4237
// Remove will remove the BaseResources of another BaseResources struct from the current one. Calling remove
@@ -47,9 +42,13 @@ func (current *BaseResources) Remove(incoming BaseResources, all bool) {
4742
current.Jobs = Sub(current.Jobs, incoming.Jobs)
4843
current.Volumes = Sub(current.Volumes, incoming.Volumes)
4944
current.Images = Sub(current.Images, incoming.Images)
50-
current.ComputeClasses.Remove(incoming.ComputeClasses)
45+
46+
current.Memory = SubQuantity(current.Memory, incoming.Memory)
47+
current.CPU = SubQuantity(current.CPU, incoming.CPU)
48+
49+
// Only remove persistent resources if all is true.
5150
if all {
52-
current.VolumeClasses.Remove(incoming.VolumeClasses)
51+
current.VolumeStorage = SubQuantity(current.VolumeStorage, incoming.VolumeStorage)
5352
}
5453
}
5554

@@ -59,7 +58,6 @@ func (current *BaseResources) Remove(incoming BaseResources, all bool) {
5958
// If the current BaseResources defines unlimited, then it will always fit.
6059
func (current *BaseResources) Fits(incoming BaseResources) error {
6160
var exceededResources []string
62-
var errs []error
6361

6462
// Check if any of the resources are exceeded
6563
for _, r := range []struct {
@@ -77,51 +75,43 @@ func (current *BaseResources) Fits(incoming BaseResources) error {
7775
}
7876
}
7977

80-
if len(exceededResources) != 0 {
81-
errs = append(errs, fmt.Errorf("%w: %s", ErrExceededResources, strings.Join(exceededResources, ", ")))
82-
}
83-
84-
if err := current.ComputeClasses.Fits(incoming.ComputeClasses); err != nil {
85-
errs = append(errs, err)
78+
// Check if any of the quantity resources are exceeded
79+
for _, r := range []struct {
80+
resource string
81+
current, incoming resource.Quantity
82+
}{
83+
{"VolumeStorage", current.VolumeStorage, incoming.VolumeStorage},
84+
{"Memory", current.Memory, incoming.Memory},
85+
{"Cpu", current.CPU, incoming.CPU},
86+
} {
87+
if !FitsQuantity(r.current, r.incoming) {
88+
exceededResources = append(exceededResources, r.resource)
89+
}
8690
}
8791

88-
if err := current.VolumeClasses.Fits(incoming.VolumeClasses); err != nil {
89-
errs = append(errs, err)
92+
// Build an aggregated error message for the exceeded resources
93+
if len(exceededResources) > 0 {
94+
return fmt.Errorf("%w: %s", ErrExceededResources, strings.Join(exceededResources, ", "))
9095
}
9196

92-
// Build an aggregated error message for the exceeded resources
93-
return errors.Join(errs...)
97+
return nil
9498
}
9599

96100
// ToString will return a string representation of the BaseResources within the struct.
97101
func (current *BaseResources) ToString() string {
98-
// make sure that an empty string doesn't have a comma
99-
result := CountResourcesToString(
102+
return ResourcesToString(
100103
map[string]int{
101104
"Apps": current.Apps,
102105
"Containers": current.Containers,
103106
"Jobs": current.Jobs,
104107
"Volumes": current.Volumes,
105108
"Images": current.Images,
106109
},
107-
)
108-
109-
for _, resource := range []struct {
110-
name string
111-
asString string
112-
}{
113-
{"ComputeClasses", current.ComputeClasses.ToString()},
114-
{"VolumeClasses", current.VolumeClasses.ToString()},
115-
} {
116-
if result != "" && resource.asString != "" {
117-
result += ", "
118-
}
119-
if resource.asString != "" {
120-
result += fmt.Sprintf("%s: %s", resource.name, resource.asString)
121-
}
122-
}
123-
124-
return result
110+
map[string]resource.Quantity{
111+
"VolumeStorage": current.VolumeStorage,
112+
"Memory": current.Memory,
113+
"Cpu": current.CPU,
114+
})
125115
}
126116

127117
// Equals will check if the current BaseResources struct is equal to another. This is useful
@@ -132,6 +122,7 @@ func (current *BaseResources) Equals(incoming BaseResources) bool {
132122
current.Jobs == incoming.Jobs &&
133123
current.Volumes == incoming.Volumes &&
134124
current.Images == incoming.Images &&
135-
current.ComputeClasses.Equals(incoming.ComputeClasses) &&
136-
current.VolumeClasses.Equals(incoming.VolumeClasses)
125+
current.VolumeStorage.Cmp(incoming.VolumeStorage) == 0 &&
126+
current.Memory.Cmp(incoming.Memory) == 0 &&
127+
current.CPU.Cmp(incoming.CPU) == 0
137128
}

0 commit comments

Comments
 (0)