From b16bcda8fb816fb3d7377892786455a9871b443e Mon Sep 17 00:00:00 2001 From: lukasboettcher <1340215+lukasboettcher@users.noreply.github.com> Date: Thu, 23 May 2024 08:08:51 +0200 Subject: [PATCH] fix(resourcequotas): Update namespace-specific hard quota calculation logic (#1088) Signed-off-by: Lukas Boettcher <1340215+lukasboettcher@users.noreply.github.com> --- controllers/tenant/resourcequotas.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/controllers/tenant/resourcequotas.go b/controllers/tenant/resourcequotas.go index e343d37a..5f5aca99 100644 --- a/controllers/tenant/resourcequotas.go +++ b/controllers/tenant/resourcequotas.go @@ -130,7 +130,15 @@ func (r *Manager) syncResourceQuotas(ctx context.Context, tenant *capsulev1beta2 list.Items[item].Spec.Hard = map[corev1.ResourceName]resource.Quantity{} } - list.Items[item].Spec.Hard[name] = resourceQuota.Hard[name] + // Effectively this subtracts the usage from all other namespaces in the tenant from the desired tenant hard quota. + // Thus we can determine, how much is left in this resourcequota (item) for the current resource (name). + // We use this remaining quota at the tenant level, to update the hard quota for the current namespace. + + newHard := hardQuota // start off with desired tenant wide hard quota + newHard.Sub(quantity) // subtract tenant wide usage + newHard.Add(list.Items[item].Status.Used[name]) // add back usage in current ns + + list.Items[item].Spec.Hard[name] = newHard for k := range list.Items[item].Spec.Hard { if !toKeep.Has(k) {