Skip to content

Commit 606aef2

Browse files
authored
Merge pull request #7852 from omerap12/migrate-ClaimOwningPod
migrate ClaimOwningPod to use upstream IsForPod
2 parents 46bf4e4 + bcf3866 commit 606aef2

File tree

6 files changed

+16
-98
lines changed

6 files changed

+16
-98
lines changed

cluster-autoscaler/simulator/clustersnapshot/predicate/predicate_snapshot.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot"
2525
drautils "k8s.io/autoscaler/cluster-autoscaler/simulator/dynamicresources/utils"
2626
"k8s.io/autoscaler/cluster-autoscaler/simulator/framework"
27+
"k8s.io/dynamic-resource-allocation/resourceclaim"
2728
schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework"
2829
)
2930

@@ -245,7 +246,7 @@ func (s *PredicateSnapshot) modifyResourceClaimsForNewPod(podInfo *framework.Pod
245246
// so we don't add them. The claims should already be allocated in the provided PodInfo.
246247
var podOwnedClaims []*resourceapi.ResourceClaim
247248
for _, claim := range podInfo.NeededResourceClaims {
248-
if ownerName, _ := drautils.ClaimOwningPod(claim); ownerName != "" {
249+
if err := resourceclaim.IsForPod(podInfo.Pod, claim); err == nil {
249250
podOwnedClaims = append(podOwnedClaims, claim)
250251
}
251252
}

cluster-autoscaler/simulator/dynamicresources/snapshot/snapshot.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ func (s Snapshot) RemovePodOwnedClaims(pod *apiv1.Pod) {
178178
// The claim isn't tracked in the snapshot for some reason. Nothing to remove/modify, so continue to the next claim.
179179
continue
180180
}
181-
if ownerName, ownerUid := drautils.ClaimOwningPod(claim); ownerName == pod.Name && ownerUid == pod.UID {
181+
if err := resourceclaim.IsForPod(pod, claim); err == nil {
182182
delete(s.resourceClaimsById, claimId)
183183
} else {
184184
drautils.ClearPodReservationInPlace(claim, pod)
@@ -214,9 +214,7 @@ func (s Snapshot) UnreservePodClaims(pod *apiv1.Pod) error {
214214
return err
215215
}
216216
for _, claim := range claims {
217-
ownerPodName, ownerPodUid := drautils.ClaimOwningPod(claim)
218-
podOwnedClaim := ownerPodName == pod.Name && ownerPodUid == ownerPodUid
219-
217+
podOwnedClaim := resourceclaim.IsForPod(pod, claim) == nil
220218
drautils.ClearPodReservationInPlace(claim, pod)
221219
if podOwnedClaim || !drautils.ClaimInUse(claim) {
222220
drautils.DeallocateClaimInPlace(claim)

cluster-autoscaler/simulator/dynamicresources/utils/resource_claims.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,10 @@ import (
2222
apiv1 "k8s.io/api/core/v1"
2323
resourceapi "k8s.io/api/resource/v1beta1"
2424
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25-
"k8s.io/apimachinery/pkg/types"
2625
"k8s.io/component-helpers/scheduling/corev1"
2726
resourceclaim "k8s.io/dynamic-resource-allocation/resourceclaim"
28-
"k8s.io/utils/ptr"
2927
)
3028

31-
// ClaimOwningPod returns the name and UID of the Pod owner of the provided claim. If the claim isn't
32-
// owned by a Pod, empty strings are returned.
33-
func ClaimOwningPod(claim *resourceapi.ResourceClaim) (string, types.UID) {
34-
for _, owner := range claim.OwnerReferences {
35-
if ptr.Deref(owner.Controller, false) && owner.APIVersion == "v1" && owner.Kind == "Pod" {
36-
return owner.Name, owner.UID
37-
}
38-
}
39-
return "", ""
40-
}
41-
4229
// ClaimAllocated returns whether the provided claim is allocated.
4330
func ClaimAllocated(claim *resourceapi.ResourceClaim) bool {
4431
return claim.Status.Allocation != nil

cluster-autoscaler/simulator/dynamicresources/utils/resource_claims_test.go

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -25,84 +25,8 @@ import (
2525
apiv1 "k8s.io/api/core/v1"
2626
resourceapi "k8s.io/api/resource/v1beta1"
2727
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28-
"k8s.io/apimachinery/pkg/types"
2928
)
3029

31-
func TestClaimOwningPod(t *testing.T) {
32-
truePtr := true
33-
for _, tc := range []struct {
34-
testName string
35-
claim *resourceapi.ResourceClaim
36-
wantName string
37-
wantUid types.UID
38-
}{
39-
{
40-
testName: "claim with no owners",
41-
claim: &resourceapi.ResourceClaim{
42-
ObjectMeta: metav1.ObjectMeta{
43-
Name: "claim", UID: "claim", Namespace: "default",
44-
},
45-
},
46-
wantName: "",
47-
wantUid: "",
48-
},
49-
{
50-
testName: "claim with non-Pod owners",
51-
claim: &resourceapi.ResourceClaim{
52-
ObjectMeta: metav1.ObjectMeta{
53-
Name: "claim", UID: "claim", Namespace: "default",
54-
OwnerReferences: []metav1.OwnerReference{
55-
{Name: "owner1", UID: "owner1uid", APIVersion: "v1", Kind: "ReplicationController", Controller: &truePtr},
56-
{Name: "owner2", UID: "owner2uid", APIVersion: "v1", Kind: "ConfigMap"},
57-
},
58-
},
59-
},
60-
wantName: "",
61-
wantUid: "",
62-
},
63-
{
64-
testName: "claim with a Pod non-controller owner",
65-
claim: &resourceapi.ResourceClaim{
66-
ObjectMeta: metav1.ObjectMeta{
67-
Name: "claim", UID: "claim", Namespace: "default",
68-
OwnerReferences: []metav1.OwnerReference{
69-
{Name: "owner1", UID: "owner1uid", APIVersion: "v1", Kind: "ReplicationController"},
70-
{Name: "owner2", UID: "owner2uid", APIVersion: "v1", Kind: "ConfigMap"},
71-
{Name: "owner3", UID: "owner3uid", APIVersion: "v1", Kind: "Pod"},
72-
},
73-
},
74-
},
75-
wantName: "",
76-
wantUid: "",
77-
},
78-
{
79-
testName: "claim with a Pod controller owner",
80-
claim: &resourceapi.ResourceClaim{
81-
ObjectMeta: metav1.ObjectMeta{
82-
Name: "claim", UID: "claim", Namespace: "default",
83-
OwnerReferences: []metav1.OwnerReference{
84-
{Name: "owner1", UID: "owner1uid", APIVersion: "v1", Kind: "ReplicationController"},
85-
{Name: "owner2", UID: "owner2uid", APIVersion: "v1", Kind: "ConfigMap"},
86-
{Name: "owner3", UID: "owner3uid", APIVersion: "v1", Kind: "Pod", Controller: &truePtr},
87-
},
88-
},
89-
},
90-
wantName: "owner3",
91-
wantUid: "owner3uid",
92-
},
93-
} {
94-
t.Run(tc.testName, func(t *testing.T) {
95-
name, uid := ClaimOwningPod(tc.claim)
96-
if tc.wantName != name {
97-
t.Errorf("ClaimOwningPod(): unexpected output name: want %s, got %s", tc.wantName, name)
98-
}
99-
if tc.wantUid != uid {
100-
t.Errorf("ClaimOwningPod(): unexpected output UID: want %v, got %v", tc.wantUid, uid)
101-
}
102-
})
103-
}
104-
}
105-
10630
func TestClaimAllocated(t *testing.T) {
10731
for _, tc := range []struct {
10832
testName string

cluster-autoscaler/simulator/dynamicresources/utils/sanitize.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
resourceapi "k8s.io/api/resource/v1beta1"
2424
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2525
"k8s.io/apimachinery/pkg/util/uuid"
26+
"k8s.io/dynamic-resource-allocation/resourceclaim"
2627
"k8s.io/utils/set"
2728
)
2829

@@ -61,7 +62,7 @@ func SanitizedNodeResourceSlices(nodeLocalSlices []*resourceapi.ResourceSlice, n
6162
func SanitizedPodResourceClaims(newOwner, oldOwner *v1.Pod, claims []*resourceapi.ResourceClaim, nameSuffix, newNodeName, oldNodeName string, oldNodePoolNames set.Set[string]) ([]*resourceapi.ResourceClaim, error) {
6263
var result []*resourceapi.ResourceClaim
6364
for _, claim := range claims {
64-
if ownerName, ownerUid := ClaimOwningPod(claim); ownerName != oldOwner.Name || ownerUid != oldOwner.UID {
65+
if err := resourceclaim.IsForPod(oldOwner, claim); err != nil {
6566
// Only claims owned by the pod are bound to its lifecycle. The lifecycle of other claims is independent, and they're most likely shared
6667
// by multiple pods. They shouldn't be sanitized or duplicated - just add unchanged to the result.
6768
result = append(result, claim)

cluster-autoscaler/simulator/node_info_utils_test.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import (
4040
"k8s.io/autoscaler/cluster-autoscaler/utils/labels"
4141
"k8s.io/autoscaler/cluster-autoscaler/utils/taints"
4242
. "k8s.io/autoscaler/cluster-autoscaler/utils/test"
43+
"k8s.io/dynamic-resource-allocation/resourceclaim"
4344
)
4445

4546
var (
@@ -601,7 +602,7 @@ func verifySanitizedPods(initialPods, sanitizedPods []*framework.PodInfo, wantNo
601602
return fmt.Errorf("sanitized Pod unexpected diff (-want +got): %s", diff)
602603
}
603604

604-
if err := verifySanitizedPodResourceClaims(initialPod.NeededResourceClaims, sanitizedPod.NeededResourceClaims, nameSuffix); err != nil {
605+
if err := verifySanitizedPodResourceClaims(initialPod, sanitizedPod, nameSuffix); err != nil {
605606
return err
606607
}
607608
}
@@ -633,7 +634,11 @@ func verifySanitizedNodeResourceSlices(initialSlices, sanitizedSlices []*resourc
633634
return nil
634635
}
635636

636-
func verifySanitizedPodResourceClaims(initialClaims, sanitizedClaims []*resourceapi.ResourceClaim, nameSuffix string) error {
637+
func verifySanitizedPodResourceClaims(initialPod, sanitizedPod *framework.PodInfo, nameSuffix string) error {
638+
initialClaims := initialPod.NeededResourceClaims
639+
sanitizedClaims := sanitizedPod.NeededResourceClaims
640+
owningPod := initialPod.Pod
641+
637642
if len(initialClaims) != len(sanitizedClaims) {
638643
return fmt.Errorf("want %d NeededResourceClaims in sanitized NodeInfo, got %d", len(initialClaims), len(sanitizedClaims))
639644
}
@@ -642,7 +647,9 @@ func verifySanitizedPodResourceClaims(initialClaims, sanitizedClaims []*resource
642647
initialClaim := initialClaims[i]
643648

644649
// Pod-owned claims should be sanitized, other claims shouldn't.
645-
if owningPod, _ := drautils.ClaimOwningPod(initialClaim); owningPod != "" {
650+
err := resourceclaim.IsForPod(owningPod, initialClaim)
651+
isPodOwned := err == nil
652+
if isPodOwned {
646653
// Pod-owned claim, verify that it was sanitized.
647654
if sanitizedClaim.Name == initialClaim.Name || !strings.HasSuffix(sanitizedClaim.Name, nameSuffix) {
648655
return fmt.Errorf("sanitized ResourceClaim name unexpected: want (different than %q, ending in %q), got %q", initialClaim.Name, nameSuffix, sanitizedClaim.Name)

0 commit comments

Comments
 (0)