Skip to content

Commit 7005f47

Browse files
committed
[node-cleanup] Check node label to know if pv is linked to a deleted node
1 parent 4f81db7 commit 7005f47

File tree

4 files changed

+21
-13
lines changed

4 files changed

+21
-13
lines changed

pkg/common/common.go

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

3535
v1 "k8s.io/api/core/v1"
36-
"k8s.io/apimachinery/pkg/api/errors"
3736
"k8s.io/apimachinery/pkg/api/resource"
3837
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
38+
"k8s.io/apimachinery/pkg/labels"
39+
"k8s.io/apimachinery/pkg/selection"
3940
"k8s.io/client-go/informers"
4041
"k8s.io/client-go/kubernetes"
4142
corelisters "k8s.io/client-go/listers/core/v1"
@@ -488,12 +489,17 @@ func GetVolumeMode(volUtil util.VolumeUtil, fullPath string) (v1.PersistentVolum
488489
}
489490

490491
// NodeExists checks to see if a Node exists in the Indexer of a NodeLister.
491-
func NodeExists(nodeLister corelisters.NodeLister, nodeName string) (bool, error) {
492-
_, err := nodeLister.Get(nodeName)
493-
if errors.IsNotFound(err) {
494-
return false, nil
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
495501
}
496-
return err == nil, err
502+
return len(nodes) > 0, nil
497503
}
498504

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

pkg/common/common_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,9 @@ func TestGetVolumeMode(t *testing.T) {
480480
func TestNodeExists(t *testing.T) {
481481
node := &v1.Node{
482482
ObjectMeta: metav1.ObjectMeta{
483-
Name: "test-node",
483+
Labels: map[string]string{
484+
NodeLabelKey: "test-node",
485+
},
484486
},
485487
}
486488

@@ -510,7 +512,7 @@ func TestNodeExists(t *testing.T) {
510512
nodeInformer.Informer().GetStore().Add(test.nodeAdded)
511513
}
512514

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

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.Name},
333+
Values: []string{node.Labels[common.NodeLabelKey]},
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.Name},
354+
Values: []string{node.Labels[common.NodeLabelKey]},
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-
Name: defaultNodeName,
389+
Labels: map[string]string{common.NodeLabelKey: 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.Name},
214+
Values: []string{node.Labels[common.NodeLabelKey]},
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-
Name: testNodeName,
233+
Labels: map[string]string{common.NodeLabelKey: testNodeName},
234234
},
235235
}
236236
}

0 commit comments

Comments
 (0)