@@ -133,14 +133,16 @@ func (r *ImagePrefetchReconciler) selectTargetNodes(ctx context.Context, imgPref
133133 }
134134
135135 if imgPrefetch .Spec .Replicas > 0 {
136- readyNodes , err := r .getReadyNodes (ctx )
136+ needsNodeSelection , err := r .isNeedNodeSelection (ctx , imgPrefetch )
137137 if err != nil {
138138 return nil , err
139139 }
140140
141- needsNodeSelection := isNeedNodeSelection (imgPrefetch , readyNodes )
142141 if needsNodeSelection {
143- nodes := selectNodesByReplicas (imgPrefetch , readyNodes )
142+ nodes , err := r .selectNodesByReplicas (ctx , imgPrefetch )
143+ if err != nil {
144+ return nil , fmt .Errorf ("failed to select nodes by replicas: %w" , err )
145+ }
144146 logger .Info ("selected nodes" , "nodes" , nodes )
145147
146148 return nodes , nil
@@ -152,14 +154,6 @@ func (r *ImagePrefetchReconciler) selectTargetNodes(ctx context.Context, imgPref
152154 return nil , fmt .Errorf ("failed to select target nodes" )
153155}
154156
155- func (r * ImagePrefetchReconciler ) getReadyNodes (ctx context.Context ) ([]corev1.Node , error ) {
156- allNodes := & corev1.NodeList {}
157- if err := r .List (ctx , allNodes ); err != nil {
158- return nil , err
159- }
160- return filterReadyNodes (allNodes .Items ), nil
161- }
162-
163157func (r * ImagePrefetchReconciler ) selectNodesBySelector (ctx context.Context , nodeSelector metav1.LabelSelector ) ([]corev1.Node , error ) {
164158 selector , err := metav1 .LabelSelectorAsSelector (& nodeSelector )
165159 if err != nil {
@@ -191,15 +185,21 @@ func filterReadyNodes(nodes []corev1.Node) []corev1.Node {
191185 return readyNodes
192186}
193187
194- func isNeedNodeSelection ( imgPrefetch * ofenv1. ImagePrefetch , readyNodes []corev1. Node ) bool {
188+ func ( r * ImagePrefetchReconciler ) isNeedNodeSelection ( ctx context. Context , imgPrefetch * ofenv1. ImagePrefetch ) ( bool , error ) {
195189 if len (imgPrefetch .Status .SelectedNodes ) == 0 {
196- return true
190+ return true , nil
197191 }
198192
199193 if imgPrefetch .Generation != imgPrefetch .Status .ObservedGeneration {
200- return true
194+ return true , nil
201195 }
202196
197+ allNodes := & corev1.NodeList {}
198+ if err := r .List (ctx , allNodes ); err != nil {
199+ return false , err
200+ }
201+
202+ readyNodes := filterReadyNodes (allNodes .Items )
203203 readyNodesName := getNodeNames (readyNodes )
204204 containUnhealthyNodes := false
205205 for _ , node := range imgPrefetch .Status .SelectedNodes {
@@ -209,7 +209,7 @@ func isNeedNodeSelection(imgPrefetch *ofenv1.ImagePrefetch, readyNodes []corev1.
209209 }
210210 }
211211
212- return containUnhealthyNodes
212+ return containUnhealthyNodes , nil
213213}
214214
215215func getNodeNames (nodes []corev1.Node ) []string {
@@ -221,10 +221,16 @@ func getNodeNames(nodes []corev1.Node) []string {
221221 return nodeNames
222222}
223223
224- func selectNodesByReplicas ( imgPrefetch * ofenv1. ImagePrefetch , readyNodes []corev1. Node ) []string {
224+ func ( r * ImagePrefetchReconciler ) selectNodesByReplicas ( ctx context. Context , imgPrefetch * ofenv1. ImagePrefetch ) ( []string , error ) {
225225 var selectNodes []string
226226 targetReplicas := imgPrefetch .Spec .Replicas
227227
228+ allNodes := & corev1.NodeList {}
229+ if err := r .List (ctx , allNodes ); err != nil {
230+ return nil , err
231+ }
232+
233+ readyNodes := filterReadyNodes (allNodes .Items )
228234 readyNodesName := getNodeNames (readyNodes )
229235 for _ , node := range imgPrefetch .Status .SelectedNodes {
230236 if len (selectNodes ) >= targetReplicas {
@@ -252,7 +258,7 @@ func selectNodesByReplicas(imgPrefetch *ofenv1.ImagePrefetch, readyNodes []corev
252258 }
253259 }
254260
255- return selectNodes
261+ return selectNodes , nil
256262}
257263
258264func (r * ImagePrefetchReconciler ) createOrUpdateNodeImageSet (ctx context.Context , imgPrefetch * ofenv1.ImagePrefetch , selectedNodes []string ) error {
0 commit comments