Skip to content

Commit b6f4650

Browse files
authored
Merge pull request #443 from DataDog/fricounet/upstream/fix-pv-deletion-node
Fix: [node-cleanup] Check node label to know if pv is linked to a deleted node
2 parents 9d34194 + 09efb94 commit b6f4650

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

pkg/common/common.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ import (
3636
"k8s.io/apimachinery/pkg/api/errors"
3737
"k8s.io/apimachinery/pkg/api/resource"
3838
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
39+
"k8s.io/apimachinery/pkg/labels"
40+
"k8s.io/apimachinery/pkg/selection"
3941
"k8s.io/client-go/informers"
4042
"k8s.io/client-go/kubernetes"
4143
corelisters "k8s.io/client-go/listers/core/v1"
@@ -488,10 +490,20 @@ func GetVolumeMode(volUtil util.VolumeUtil, fullPath string) (v1.PersistentVolum
488490
}
489491

490492
// NodeExists checks to see if a Node exists in the Indexer of a NodeLister.
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.
491495
func NodeExists(nodeLister corelisters.NodeLister, nodeName string) (bool, error) {
492496
_, err := nodeLister.Get(nodeName)
493497
if errors.IsNotFound(err) {
494-
return false, nil
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
495507
}
496508
return err == nil, err
497509
}

pkg/common/common_test.go

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -478,9 +478,17 @@ 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{
482483
ObjectMeta: metav1.ObjectMeta{
483-
Name: "test-node",
484+
Name: nodeName,
485+
},
486+
}
487+
nodeWithLabel := &v1.Node{
488+
ObjectMeta: metav1.ObjectMeta{
489+
Labels: map[string]string{
490+
NodeLabelKey: nodeName,
491+
},
484492
},
485493
}
486494

@@ -491,12 +499,17 @@ func TestNodeExists(t *testing.T) {
491499
expectedResult bool
492500
}{
493501
{
494-
nodeAdded: node,
495-
nodeQueried: node,
502+
nodeAdded: nodeWithName,
503+
nodeQueried: nodeWithName,
504+
expectedResult: true,
505+
},
506+
{
507+
nodeAdded: nodeWithLabel,
508+
nodeQueried: nodeWithName,
496509
expectedResult: true,
497510
},
498511
{
499-
nodeQueried: node,
512+
nodeQueried: nodeWithName,
500513
expectedResult: false,
501514
},
502515
}

0 commit comments

Comments
 (0)