Skip to content

Commit 37ea0c4

Browse files
committed
polish based on the comments
1 parent 43186c1 commit 37ea0c4

1 file changed

Lines changed: 35 additions & 63 deletions

File tree

pkg/controller/launcher-populator/populator.go

Lines changed: 35 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,6 @@ func (ctl *controller) OnDelete(obj any) {
166166
ctl.enqueueLogger.V(5).Info("Enqueuing LauncherPopulationPolicy reference due to notification of delete", "name", typed.Name)
167167
item := lppItem{cache.MetaObjectToName(typed)}
168168
ctl.Queue.Add(item)
169-
case *fmav1alpha1.LauncherConfig:
170-
ctl.enqueueLogger.V(5).Info("Enqueuing LauncherConfig reference due to notification of delete", "name", typed.Name)
171-
item := lcItem{cache.MetaObjectToName(typed)}
172-
ctl.Queue.Add(item)
173169
default:
174170
ctl.enqueueLogger.V(5).Info("Notified of delete of type of ignored object", "type", fmt.Sprintf("%T", obj))
175171
return
@@ -195,53 +191,16 @@ func (ctl *controller) process(ctx context.Context, item queueItem) (error, bool
195191

196192
func (item lppItem) process(ctx context.Context, ctl *controller) (error, bool) {
197193
logger := klog.FromContext(ctx)
198-
// Get the list of LauncherPopulationPolicies
199-
policies, err := ctl.lppLister.List(labels.Everything())
200-
if err != nil {
201-
logger.Error(err, "Failed to list LauncherPopulationPolicies")
202-
return err, true // Return error and retry
203-
}
204-
205-
// If needed, process the retrieved policies here
206-
// For example: iterate through policies to perform corresponding business logic
207194

208-
logger.Info("Successfully listed LauncherPopulationPolicies", "count", len(policies))
209-
210-
// Build the PopulationPolicy map, storing the maximum count for each (Node, LauncherConfig) pair
211-
populationPolicy := make(map[NodeLauncherKey]int32)
212-
for _, lpp := range policies {
213-
// Get matching nodes
214-
nodes, err := ctl.getMatchingNodes(ctx, lpp.Spec.EnhancedNodeSelector)
215-
if err != nil {
216-
logger.Error(err, "Failed to get matching nodes for policy", "policy", lpp.Name)
217-
return err, true
218-
}
219-
logger.Info("Found matching nodes", "count", len(nodes), "policy", lpp.Name)
220-
// For each CountForLauncher rule
221-
for _, countRule := range lpp.Spec.CountForLauncher {
222-
for _, node := range nodes {
223-
key := NodeLauncherKey{
224-
NodeName: node.Name,
225-
LauncherConfigName: countRule.LauncherConfigName,
226-
}
227-
currentCount, exists := populationPolicy[key]
228-
logger.Info("Current count for node", "node", node.Name, "launcherConfigName",
229-
countRule.LauncherConfigName, "launcherCount", countRule.LauncherCount, "currentCount", currentCount, "exists", exists)
230-
231-
// Take the maximum value (rule: when multiple CountForLauncher apply to the same pair, take the maximum)
232-
if !exists || countRule.LauncherCount > currentCount {
233-
populationPolicy[key] = countRule.LauncherCount
234-
logger.Info("Updated population policy",
235-
"node", node.Name,
236-
"config", countRule.LauncherConfigName,
237-
"count", countRule.LauncherCount,
238-
"policy", lpp.Name)
239-
}
240-
}
241-
}
195+
// Build desired state from all policies
196+
populationPolicy, err := ctl.buildDesiredStateFromPolicies(ctx, nil)
197+
if err != nil {
198+
logger.Error(err, "Failed to build desired state from policies")
199+
return err, true
242200
}
243201

244202
logger.Info("Final population policy", "policy", MapToLoggable(populationPolicy))
203+
245204
// Adjust launcher pods according to final requirements
246205
if err := ctl.reconcileAllLaunchers(ctx, populationPolicy); err != nil {
247206
logger.Error(err, "Failed to reconcile launchers")
@@ -257,21 +216,42 @@ func (item lcItem) process(ctx context.Context, ctl *controller) (error, bool) {
257216
lc, err := ctl.lcLister.LauncherConfigs(ctl.namespace).Get(item.Name)
258217
if err != nil {
259218
if apierrors.IsNotFound(err) {
260-
logger.Info("LauncherConfig no longer exists, skipping reconciliation", "name", item.Name)
219+
logger.Info("LauncherConfig does not exist yet, skipping reconciliation", "name", item.Name)
261220
return nil, false
262221
}
263222
logger.Error(err, "Failed to get LauncherConfig", "name", item.Name)
264223
return err, true
265224
}
266225

267-
// Get all LauncherPopulationPolicies that reference this LauncherConfig
268-
policies, err := ctl.lppLister.List(labels.Everything())
226+
// Build desired state only for policies that reference this LauncherConfig
227+
populationPolicy, err := ctl.buildDesiredStateFromPolicies(ctx, &item.Name)
269228
if err != nil {
270-
logger.Error(err, "Failed to list LauncherPopulationPolicies")
229+
logger.Error(err, "Failed to build desired state from policies")
271230
return err, true
272231
}
273232

274-
// Build desired state for this LauncherConfig across all nodes
233+
logger.Info("Final population policy for LauncherConfig", "config", item.Name, "policy", MapToLoggable(populationPolicy))
234+
235+
// Reconcile launchers for this LauncherConfig
236+
if err := ctl.reconcileAllLaunchers(ctx, populationPolicy); err != nil {
237+
logger.Error(err, "Failed to reconcile launchers for LauncherConfig", "name", lc.Name)
238+
return err, true
239+
}
240+
241+
logger.Info("Successfully reconciled launchers for LauncherConfig", "name", lc.Name)
242+
return nil, false
243+
}
244+
245+
// buildDesiredStateFromPolicies builds the desired state map from all policies.
246+
// If filterByConfig is provided, only policies referencing that config are considered.
247+
func (ctl *controller) buildDesiredStateFromPolicies(ctx context.Context, filterByConfig *string) (map[NodeLauncherKey]int32, error) {
248+
logger := klog.FromContext(ctx)
249+
250+
policies, err := ctl.lppLister.List(labels.Everything())
251+
if err != nil {
252+
return nil, fmt.Errorf("failed to list LauncherPopulationPolicies: %w", err)
253+
}
254+
275255
desired := make(map[NodeLauncherKey]int32)
276256
for _, lpp := range policies {
277257
nodes, err := ctl.getMatchingNodes(ctx, lpp.Spec.EnhancedNodeSelector)
@@ -281,30 +261,22 @@ func (item lcItem) process(ctx context.Context, ctl *controller) (error, bool) {
281261
}
282262

283263
for _, countRule := range lpp.Spec.CountForLauncher {
284-
if countRule.LauncherConfigName != lc.Name {
264+
if filterByConfig != nil && countRule.LauncherConfigName != *filterByConfig {
285265
continue
286266
}
287267
for _, node := range nodes {
288268
key := NodeLauncherKey{
289269
NodeName: node.Name,
290-
LauncherConfigName: lc.Name,
270+
LauncherConfigName: countRule.LauncherConfigName,
291271
}
292-
// Take the maximum count if multiple rules apply
293272
if current, exists := desired[key]; !exists || countRule.LauncherCount > current {
294273
desired[key] = countRule.LauncherCount
295274
}
296275
}
297276
}
298277
}
299278

300-
// Reconcile launchers for this LauncherConfig
301-
if err := ctl.reconcileAllLaunchers(ctx, desired); err != nil {
302-
logger.Error(err, "Failed to reconcile launchers for LauncherConfig", "name", lc.Name)
303-
return err, true
304-
}
305-
306-
logger.Info("Successfully reconciled launchers for LauncherConfig", "name", lc.Name)
307-
return nil, false
279+
return desired, nil
308280
}
309281

310282
// getMatchingNodes returns nodes that match the EnhancedNodeSelector

0 commit comments

Comments
 (0)