Skip to content

Commit

Permalink
Merge pull request #1815 from marquiz/devel/gc-paging
Browse files Browse the repository at this point in the history
nfd-gc: use paging when listing CRs
  • Loading branch information
k8s-ci-robot committed Aug 2, 2024
2 parents 57f1b79 + 45164f5 commit 13d5a4f
Showing 1 changed file with 35 additions and 24 deletions.
59 changes: 35 additions & 24 deletions pkg/nfd-gc/nfd-gc.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/sets"
metadataclient "k8s.io/client-go/metadata"
"k8s.io/client-go/metadata/metadatainformer"
Expand Down Expand Up @@ -152,37 +153,47 @@ func (n *nfdGarbageCollector) garbageCollect() {
nodeNames.Insert(meta.Name)
}

// Handle NodeFeature objects
objMetas, err := n.client.Resource(gvrNF).List(context.TODO(), metav1.ListOptions{})
if errors.IsNotFound(err) {
klog.V(2).InfoS("NodeFeature CRD does not exist")
} else if err != nil {
klog.ErrorS(err, "failed to list NodeFeature objects")
} else {
for _, nf := range objMetas.Items {
nodeName, ok := nf.GetLabels()[nfdv1alpha1.NodeFeatureObjNodeNameLabel]
if !ok {
klog.InfoS("node name label missing from NodeFeature object", "nodefeature", klog.KObj(&nf))
listAndHandle := func(gvr schema.GroupVersionResource, handler func(metav1.PartialObjectMetadata)) {
opts := metav1.ListOptions{
Limit: 200,
}
for {
rsp, err := n.client.Resource(gvr).List(context.TODO(), opts)
if errors.IsNotFound(err) {
klog.V(2).InfoS("resource does not exist", "resource", gvr)
break
} else if err != nil {
klog.ErrorS(err, "failed to list objects", "resource", gvr)
break
}
if !nodeNames.Has(nodeName) {
n.deleteNodeFeature(nf.Namespace, nf.Name)
for _, item := range rsp.Items {
handler(item)
}

if rsp.ListMeta.Continue == "" {
break
}
opts.Continue = rsp.ListMeta.Continue
}
}

// Handle NodeFeature objects
listAndHandle(gvrNF, func(meta metav1.PartialObjectMetadata) {
nodeName, ok := meta.GetLabels()[nfdv1alpha1.NodeFeatureObjNodeNameLabel]
if !ok {
klog.InfoS("node name label missing from NodeFeature object", "nodefeature", klog.KObj(&meta))
}
if !nodeNames.Has(nodeName) {
n.deleteNodeFeature(meta.Namespace, meta.Name)
}
})

// Handle NodeResourceTopology objects
objMetas, err = n.client.Resource(gvrNRT).List(context.TODO(), metav1.ListOptions{})
if errors.IsNotFound(err) {
klog.V(2).InfoS("NodeResourceTopology CRD does not exist")
} else if err != nil {
klog.ErrorS(err, "failed to list NodeResourceTopology objects")
} else {
for _, nrt := range objMetas.Items {
if !nodeNames.Has(nrt.Name) {
n.deleteNRT(nrt.Name)
}
listAndHandle(gvrNRT, func(meta metav1.PartialObjectMetadata) {
if !nodeNames.Has(meta.Name) {
n.deleteNRT(meta.Name)
}
}
})
}

// periodicGC runs garbage collector at every gcPeriod to make sure we haven't missed any node
Expand Down

0 comments on commit 13d5a4f

Please sign in to comment.