layer1: share managed namespace watcher startup

This commit is contained in:
Naeel
2026-04-26 10:51:31 +03:00
parent 49be1db3a0
commit a1517ba4b2
5 changed files with 49 additions and 80 deletions
+1 -28
View File
@@ -65,11 +65,7 @@ import (
"time"
"go.uber.org/zap"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
k8sInformers "k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
k8sCache "k8s.io/client-go/tools/cache"
fv1 "github.com/fission/fission/pkg/apis/core/v1"
"github.com/fission/fission/pkg/executor/executortype"
@@ -96,30 +92,7 @@ func StartNSWatcher(
if err != nil {
logger.Error("multitenant.NSWatcher: BootstrapAndDispatch failed", zap.Error(err))
}
// Use a label-filtered informer so only Namespaces with our label are delivered.
// The resync period of 30m is standard for Fission informers — it re-lists to recover
// from any missed events, but normal operation is purely event-driven (no ticking).
factory := k8sInformers.NewSharedInformerFactoryWithOptions(
kubernetesClient,
30*time.Minute,
k8sInformers.WithTweakListOptions(func(opts *metav1.ListOptions) {
opts.LabelSelector = utils.ManagedNamespaceLabelSelector()
}),
)
nsInformer := factory.Core().V1().Namespaces().Informer()
_, _ = nsInformer.AddEventHandler(utils.NewNamespaceWatcherEventHandlers(ctx, logger, "multitenant.NSWatcher", nsManager, utils.NamespaceRemovalStrategyTrackOnly))
mgr.Add(ctx, func(ctx context.Context) {
logger.Info("multitenant.NSWatcher: started", zap.String("label", utils.ManagedNamespaceLabelSelector()))
factory.Start(ctx.Done())
factory.WaitForCacheSync(ctx.Done())
logger.Info("multitenant.NSWatcher: cache synced — watching for new namespaces")
<-ctx.Done()
logger.Info("multitenant.NSWatcher: stopped")
})
utils.StartManagedNamespaceWatcher(ctx, logger, "multitenant.NSWatcher", kubernetesClient, mgr, utils.NewNamespaceWatcherEventHandlers(ctx, logger, "multitenant.NSWatcher", nsManager, utils.NamespaceRemovalStrategyTrackOnly))
}
// registerNamespace calls AddNamespace on every executor type for the given namespace.