layer1: centralize namespace watcher handlers

This commit is contained in:
Naeel
2026-04-26 10:47:12 +03:00
parent 4cd4bc9507
commit 340b9cae84
6 changed files with 125 additions and 84 deletions
+6 -28
View File
@@ -114,43 +114,21 @@ func StartNSWatcher(
// AddFunc fires when a new Namespace with the label appears.
AddFunc: func(obj interface{}) {
nsObj, ok := obj.(*corev1.Namespace)
if !ok || nsObj.Name == "" {
return
}
if _, _, err := utils.DispatchNamespaceAdd(ctx, nsManager, nsObj, utils.NamespaceSourceWatcher, time.Now().UTC()); err != nil {
logger.Error("multitenant.NSWatcher: DispatchAdd failed",
zap.String("namespace", nsObj.Name), zap.Error(err))
if ok {
utils.HandleWatcherNamespaceAdd(ctx, logger, "multitenant.NSWatcher", nsManager, nsObj)
}
},
// UpdateFunc fires when an existing Namespace is updated — covers the case
// where the label is added to a pre-existing Namespace.
UpdateFunc: func(oldObj, newObj interface{}) {
nsObj, ok := newObj.(*corev1.Namespace)
if !ok {
return
}
oldNSObj, _ := oldObj.(*corev1.Namespace)
if utils.NamespaceBecameUnmanaged(oldNSObj, nsObj) {
_, _ = utils.RecordNamespaceRemoval(nsManager, nsObj, utils.NamespaceSourceWatcher, time.Now().UTC())
logger.Info("multitenant.NSWatcher: namespace removed from manager state; runtime registrations kept",
zap.String("namespace", nsObj.Name))
return
}
if !utils.IsManagedNamespace(nsObj.Labels) {
return // label was removed — nothing to do (executor keeps existing registrations)
}
if _, _, err := utils.DispatchNamespaceResync(ctx, nsManager, nsObj, utils.NamespaceSourceWatcher, time.Now().UTC()); err != nil {
logger.Error("multitenant.NSWatcher: DispatchResync failed",
zap.String("namespace", nsObj.Name), zap.Error(err))
nsObj, ok := newObj.(*corev1.Namespace)
if ok {
utils.HandleWatcherNamespaceUpdate(ctx, logger, "multitenant.NSWatcher", nsManager, oldNSObj, nsObj)
}
},
DeleteFunc: func(obj interface{}) {
record, ok := utils.RecordNamespaceRemoval(nsManager, obj, utils.NamespaceSourceWatcher, time.Now().UTC())
if !ok {
return
}
logger.Info("multitenant.NSWatcher: namespace deleted from manager state; runtime registrations kept",
zap.String("namespace", record.Name))
utils.HandleWatcherNamespaceDelete(logger, "multitenant.NSWatcher", nsManager, obj)
},
})