Skip to content

Commit 5c4948f

Browse files
committed
controller: factor out pod node name indexer helper function
Signed-off-by: xigang <[email protected]>
1 parent abad982 commit 5c4948f

File tree

2 files changed

+28
-16
lines changed

2 files changed

+28
-16
lines changed

pkg/controller/controller_utils.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ const (
8383
// The number of batches is given by:
8484
// 1+floor(log_2(ceil(N/SlowStartInitialBatchSize)))
8585
SlowStartInitialBatchSize = 1
86+
87+
// PodNodeNameKeyIndex is the name of the index used by PodInformer to index pods by their node name.
88+
PodNodeNameKeyIndex = "spec.nodeName"
8689
)
8790

8891
var UpdateTaintBackoff = wait.Backoff{
@@ -1051,6 +1054,28 @@ func FilterReplicaSets(RSes []*apps.ReplicaSet, filterFn filterRS) []*apps.Repli
10511054
return filtered
10521055
}
10531056

1057+
// AddPodNodeNameIndexer adds an indexer for Pod's nodeName to the given PodInformer.
1058+
// This indexer is used to efficiently look up pods by their node name.
1059+
func AddPodNodeNameIndexer(podInformer cache.SharedIndexInformer) error {
1060+
if _, exists := podInformer.GetIndexer().GetIndexers()[PodNodeNameKeyIndex]; exists {
1061+
// indexer already exists, do nothing
1062+
return nil
1063+
}
1064+
1065+
return podInformer.AddIndexers(cache.Indexers{
1066+
PodNodeNameKeyIndex: func(obj interface{}) ([]string, error) {
1067+
pod, ok := obj.(*v1.Pod)
1068+
if !ok {
1069+
return []string{}, nil
1070+
}
1071+
if len(pod.Spec.NodeName) == 0 {
1072+
return []string{}, nil
1073+
}
1074+
return []string{pod.Spec.NodeName}, nil
1075+
},
1076+
})
1077+
}
1078+
10541079
// PodKey returns a key unique to the given pod within a cluster.
10551080
// It's used so we consistently use the same key scheme in this module.
10561081
// It does exactly what cache.MetaNamespaceKeyFunc would have done

pkg/controller/nodelifecycle/node_lifecycle_controller.go

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,7 @@ const (
125125

126126
const (
127127
// The amount of time the nodecontroller should sleep between retrying node health updates
128-
retrySleepTime = 20 * time.Millisecond
129-
nodeNameKeyIndex = "spec.nodeName"
128+
retrySleepTime = 20 * time.Millisecond
130129
// podUpdateWorkerSizes assumes that in most cases pod will be handled by monitorNodeHealth pass.
131130
// Pod update workers will only handle lagging cache pods. 4 workers should be enough.
132131
podUpdateWorkerSize = 4
@@ -388,22 +387,10 @@ func NewNodeLifecycleController(
388387
},
389388
})
390389
nc.podInformerSynced = podInformer.Informer().HasSynced
391-
podInformer.Informer().AddIndexers(cache.Indexers{
392-
nodeNameKeyIndex: func(obj interface{}) ([]string, error) {
393-
pod, ok := obj.(*v1.Pod)
394-
if !ok {
395-
return []string{}, nil
396-
}
397-
if len(pod.Spec.NodeName) == 0 {
398-
return []string{}, nil
399-
}
400-
return []string{pod.Spec.NodeName}, nil
401-
},
402-
})
403-
390+
controller.AddPodNodeNameIndexer(podInformer.Informer())
404391
podIndexer := podInformer.Informer().GetIndexer()
405392
nc.getPodsAssignedToNode = func(nodeName string) ([]*v1.Pod, error) {
406-
objs, err := podIndexer.ByIndex(nodeNameKeyIndex, nodeName)
393+
objs, err := podIndexer.ByIndex(controller.PodNodeNameKeyIndex, nodeName)
407394
if err != nil {
408395
return nil, err
409396
}

0 commit comments

Comments
 (0)