Skip to content

Commit 09efb94

Browse files
committed
[node-cleanup] Keep the original get when checking for node
Only fallback ont the list call with the label if the node is not found in the get. This should be safer.
1 parent 7005f47 commit 09efb94

File tree

4 files changed

+38
-21
lines changed

4 files changed

+38
-21
lines changed

pkg/common/common.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"sigs.k8s.io/yaml"
3434

3535
v1 "k8s.io/api/core/v1"
36+
"k8s.io/apimachinery/pkg/api/errors"
3637
"k8s.io/apimachinery/pkg/api/resource"
3738
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3839
"k8s.io/apimachinery/pkg/labels"
@@ -489,17 +490,22 @@ func GetVolumeMode(volUtil util.VolumeUtil, fullPath string) (v1.PersistentVolum
489490
}
490491

491492
// NodeExists checks to see if a Node exists in the Indexer of a NodeLister.
492-
// It uses the well known label `kubernetes.io/hostname` to find the Node.
493-
func NodeExists(nodeLister corelisters.NodeLister, nodeLabelValue string) (bool, error) {
494-
req, err := labels.NewRequirement(NodeLabelKey, selection.Equals, []string{nodeLabelValue})
495-
if err != nil {
496-
return false, err
497-
}
498-
nodes, err := nodeLister.List(labels.NewSelector().Add(*req))
499-
if err != nil {
500-
return false, err
493+
// It tries to get the node and if it fails, it uses the well known label
494+
// `kubernetes.io/hostname` to find the Node.
495+
func NodeExists(nodeLister corelisters.NodeLister, nodeName string) (bool, error) {
496+
_, err := nodeLister.Get(nodeName)
497+
if errors.IsNotFound(err) {
498+
req, err := labels.NewRequirement(NodeLabelKey, selection.Equals, []string{nodeName})
499+
if err != nil {
500+
return false, err
501+
}
502+
nodes, err := nodeLister.List(labels.NewSelector().Add(*req))
503+
if err != nil {
504+
return false, err
505+
}
506+
return len(nodes) > 0, nil
501507
}
502-
return len(nodes) > 0, nil
508+
return err == nil, err
503509
}
504510

505511
// NodeAttachedToLocalPV gets the name of the Node that a local PV has a NodeAffinity to.

pkg/common/common_test.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -478,10 +478,16 @@ func TestGetVolumeMode(t *testing.T) {
478478
}
479479

480480
func TestNodeExists(t *testing.T) {
481-
node := &v1.Node{
481+
nodeName := "test-node"
482+
nodeWithName := &v1.Node{
483+
ObjectMeta: metav1.ObjectMeta{
484+
Name: nodeName,
485+
},
486+
}
487+
nodeWithLabel := &v1.Node{
482488
ObjectMeta: metav1.ObjectMeta{
483489
Labels: map[string]string{
484-
NodeLabelKey: "test-node",
490+
NodeLabelKey: nodeName,
485491
},
486492
},
487493
}
@@ -493,12 +499,17 @@ func TestNodeExists(t *testing.T) {
493499
expectedResult bool
494500
}{
495501
{
496-
nodeAdded: node,
497-
nodeQueried: node,
502+
nodeAdded: nodeWithName,
503+
nodeQueried: nodeWithName,
504+
expectedResult: true,
505+
},
506+
{
507+
nodeAdded: nodeWithLabel,
508+
nodeQueried: nodeWithName,
498509
expectedResult: true,
499510
},
500511
{
501-
nodeQueried: node,
512+
nodeQueried: nodeWithName,
502513
expectedResult: false,
503514
},
504515
}
@@ -512,7 +523,7 @@ func TestNodeExists(t *testing.T) {
512523
nodeInformer.Informer().GetStore().Add(test.nodeAdded)
513524
}
514525

515-
exists, err := NodeExists(nodeInformer.Lister(), test.nodeQueried.Labels[NodeLabelKey])
526+
exists, err := NodeExists(nodeInformer.Lister(), test.nodeQueried.Name)
516527
if err != nil {
517528
t.Errorf("Got unexpected error: %s", err.Error())
518529
}

pkg/node-cleanup/controller/controller_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ func pvWithPVCAndNode(pvc *v1.PersistentVolumeClaim, node *v1.Node) *v1.Persiste
330330
{
331331
Key: common.NodeLabelKey,
332332
Operator: v1.NodeSelectorOpIn,
333-
Values: []string{node.Labels[common.NodeLabelKey]},
333+
Values: []string{node.Name},
334334
},
335335
},
336336
},
@@ -351,7 +351,7 @@ func pvWithNode(node *v1.Node) *v1.PersistentVolume {
351351
{
352352
Key: common.NodeLabelKey,
353353
Operator: v1.NodeSelectorOpIn,
354-
Values: []string{node.Labels[common.NodeLabelKey]},
354+
Values: []string{node.Name},
355355
},
356356
},
357357
},
@@ -386,7 +386,7 @@ func pvcWithUID(uid string) *v1.PersistentVolumeClaim {
386386
func node() *v1.Node {
387387
return &v1.Node{
388388
ObjectMeta: metav1.ObjectMeta{
389-
Labels: map[string]string{common.NodeLabelKey: defaultNodeName},
389+
Name: defaultNodeName,
390390
},
391391
}
392392
}

pkg/node-cleanup/deleter/deleter_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ func localPV(node *v1.Node, phase v1.PersistentVolumePhase, reclaimPolicy v1.Per
211211
{
212212
Key: common.NodeLabelKey,
213213
Operator: v1.NodeSelectorOpIn,
214-
Values: []string{node.Labels[common.NodeLabelKey]},
214+
Values: []string{node.Name},
215215
},
216216
},
217217
},
@@ -230,7 +230,7 @@ func localPV(node *v1.Node, phase v1.PersistentVolumePhase, reclaimPolicy v1.Per
230230
func node() *v1.Node {
231231
return &v1.Node{
232232
ObjectMeta: metav1.ObjectMeta{
233-
Labels: map[string]string{common.NodeLabelKey: testNodeName},
233+
Name: testNodeName,
234234
},
235235
}
236236
}

0 commit comments

Comments
 (0)