Skip to content

Commit 6e94d8f

Browse files
committed
Use single informer for all ComputeDomain daemonset pods
Signed-off-by: Kevin Klues <[email protected]>
1 parent c87e471 commit 6e94d8f

File tree

2 files changed

+19
-73
lines changed

2 files changed

+19
-73
lines changed

cmd/compute-domain-controller/daemonset.go

Lines changed: 5 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ type DaemonSetManager struct {
6666
informer cache.SharedIndexInformer
6767
mutationCache cache.MutationCache
6868

69+
daemonsetPodManager *DaemonSetPodManager
6970
resourceClaimTemplateManager *DaemonSetResourceClaimTemplateManager
7071
cleanupManager *CleanupManager[*appsv1.DaemonSet]
71-
podManagers map[string]*DaemonSetPodManager
7272
}
7373

7474
func NewDaemonSetManager(config *ManagerConfig, getComputeDomain GetComputeDomainFunc) *DaemonSetManager {
@@ -84,10 +84,10 @@ func NewDaemonSetManager(config *ManagerConfig, getComputeDomain GetComputeDomai
8484
factory := informers.NewSharedInformerFactoryWithOptions(
8585
config.clientsets.Core,
8686
informerResyncPeriod,
87+
informers.WithNamespace(config.driverNamespace),
8788
informers.WithTweakListOptions(func(opts *metav1.ListOptions) {
8889
opts.LabelSelector = metav1.FormatLabelSelector(labelSelector)
8990
}),
90-
informers.WithNamespace(config.driverNamespace),
9191
)
9292

9393
informer := factory.Apps().V1().DaemonSets().Informer()
@@ -97,8 +97,8 @@ func NewDaemonSetManager(config *ManagerConfig, getComputeDomain GetComputeDomai
9797
getComputeDomain: getComputeDomain,
9898
factory: factory,
9999
informer: informer,
100-
podManagers: make(map[string]*DaemonSetPodManager),
101100
}
101+
m.daemonsetPodManager = NewDaemonSetPodManager(config, getComputeDomain)
102102
m.resourceClaimTemplateManager = NewDaemonSetResourceClaimTemplateManager(config, getComputeDomain)
103103
m.cleanupManager = NewCleanupManager[*appsv1.DaemonSet](informer, getComputeDomain, m.cleanup)
104104

@@ -163,8 +163,8 @@ func (m *DaemonSetManager) Start(ctx context.Context) (rerr error) {
163163
}
164164

165165
func (m *DaemonSetManager) Stop() error {
166-
if err := m.removeAllPodManagers(); err != nil {
167-
return fmt.Errorf("error removing all Pod managers: %w", err)
166+
if err := m.daemonsetPodManager.Stop(); err != nil {
167+
return fmt.Errorf("error removing daemonset Pod manager: %w", err)
168168
}
169169
if err := m.resourceClaimTemplateManager.Stop(); err != nil {
170170
return fmt.Errorf("error stopping ResourceClaimTemplate manager: %w", err)
@@ -266,16 +266,11 @@ func (m *DaemonSetManager) Delete(ctx context.Context, cdUID string) error {
266266
}
267267

268268
d := ds[0]
269-
key := d.Spec.Selector.MatchLabels[computeDomainLabelKey]
270269

271270
if err := m.resourceClaimTemplateManager.Delete(ctx, cdUID); err != nil {
272271
return fmt.Errorf("error deleting ResourceClaimTemplate: %w", err)
273272
}
274273

275-
if err := m.removePodManager(key); err != nil {
276-
return fmt.Errorf("error removing Pod manager: %w", err)
277-
}
278-
279274
if d.GetDeletionTimestamp() != nil {
280275
return nil
281276
}
@@ -374,10 +369,6 @@ func (m *DaemonSetManager) onAddOrUpdate(ctx context.Context, obj any) error {
374369
return nil
375370
}
376371

377-
if err := m.addPodManager(ctx, d.Spec.Selector, string(cd.UID)); err != nil {
378-
return fmt.Errorf("error adding Pod manager '%s/%s': %w", d.Namespace, d.Name, err)
379-
}
380-
381372
if int(d.Status.NumberReady) != cd.Spec.NumNodes {
382373
return nil
383374
}
@@ -400,57 +391,3 @@ func (m *DaemonSetManager) cleanup(ctx context.Context, cdUID string) error {
400391
}
401392
return nil
402393
}
403-
404-
func (m *DaemonSetManager) addPodManager(ctx context.Context, labelSelector *metav1.LabelSelector, computeDomainUID string) error {
405-
key := labelSelector.MatchLabels[computeDomainLabelKey]
406-
407-
if _, exists := m.podManagers[key]; exists {
408-
return nil
409-
}
410-
411-
podManager := NewDaemonSetPodManager(m.config, labelSelector, m.getComputeDomain, computeDomainUID)
412-
413-
if err := podManager.Start(ctx); err != nil {
414-
return fmt.Errorf("error creating Pod manager: %w", err)
415-
}
416-
417-
m.Lock()
418-
m.podManagers[key] = podManager
419-
m.Unlock()
420-
421-
return nil
422-
}
423-
424-
func (m *DaemonSetManager) removePodManager(key string) error {
425-
if _, exists := m.podManagers[key]; !exists {
426-
return nil
427-
}
428-
429-
m.Lock()
430-
podManager := m.podManagers[key]
431-
m.Unlock()
432-
433-
if err := podManager.Stop(); err != nil {
434-
return fmt.Errorf("error stopping Pod manager: %w", err)
435-
}
436-
437-
m.Lock()
438-
delete(m.podManagers, key)
439-
m.Unlock()
440-
441-
return nil
442-
}
443-
444-
func (m *DaemonSetManager) removeAllPodManagers() error {
445-
m.Lock()
446-
for key, pm := range m.podManagers {
447-
m.Unlock()
448-
if err := pm.Stop(); err != nil {
449-
return fmt.Errorf("error stopping Pod manager: %w", err)
450-
}
451-
m.Lock()
452-
delete(m.podManagers, key)
453-
}
454-
m.Unlock()
455-
return nil
456-
}

cmd/compute-domain-controller/daemonsetpods.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,20 @@ type DaemonSetPodManager struct {
4141
lister corev1listers.PodLister
4242

4343
getComputeDomain GetComputeDomainFunc
44-
computeDomainUID string
4544

4645
cleanupManager *CleanupManager[*corev1.Pod]
4746
}
4847

49-
func NewDaemonSetPodManager(config *ManagerConfig, labelSelector *metav1.LabelSelector, getComputeDomain GetComputeDomainFunc, computeDomainUID string) *DaemonSetPodManager {
48+
func NewDaemonSetPodManager(config *ManagerConfig, getComputeDomain GetComputeDomainFunc) *DaemonSetPodManager {
49+
labelSelector := &metav1.LabelSelector{
50+
MatchExpressions: []metav1.LabelSelectorRequirement{
51+
{
52+
Key: computeDomainLabelKey,
53+
Operator: metav1.LabelSelectorOpExists,
54+
},
55+
},
56+
}
57+
5058
factory := informers.NewSharedInformerFactoryWithOptions(
5159
config.clientsets.Core,
5260
informerResyncPeriod,
@@ -65,7 +73,6 @@ func NewDaemonSetPodManager(config *ManagerConfig, labelSelector *metav1.LabelSe
6573
informer: informer,
6674
lister: lister,
6775
getComputeDomain: getComputeDomain,
68-
computeDomainUID: computeDomainUID,
6976
}
7077

7178
m.cleanupManager = NewCleanupManager[*corev1.Pod](informer, getComputeDomain, m.cleanup)
@@ -135,7 +142,9 @@ func (m *DaemonSetPodManager) Stop() error {
135142
if err := m.cleanupManager.Stop(); err != nil {
136143
return fmt.Errorf("error stopping cleanup manager: %w", err)
137144
}
138-
m.cancelContext()
145+
if m.cancelContext != nil {
146+
m.cancelContext()
147+
}
139148
m.waitGroup.Wait()
140149
return nil
141150
}
@@ -188,7 +197,7 @@ func (m *DaemonSetPodManager) onPodDelete(ctx context.Context, obj any) error {
188197
return fmt.Errorf("failed to cast to Pod")
189198
}
190199

191-
cd, err := m.getComputeDomain(m.computeDomainUID)
200+
cd, err := m.getComputeDomain(p.Labels[computeDomainLabelKey])
192201
if err != nil {
193202
return fmt.Errorf("error getting ComputeDomain: %w", err)
194203
}

0 commit comments

Comments
 (0)