From 6e037a506dd6a72ff0af36c2ce63d8fc9ca73086 Mon Sep 17 00:00:00 2001 From: Naeel Date: Sun, 26 Apr 2026 11:03:39 +0300 Subject: [PATCH] layer1: add default watcher config helper --- .../2026-04-26-namespace-manager-step51.md | 18 ++++++++++++++ pkg/buildermgr/ns_watcher.go | 7 +----- pkg/executor/multitenant/ns_watcher.go | 7 +----- pkg/router/ns_watcher.go | 7 +----- pkg/utils/namespace_manager.go | 9 +++++++ pkg/utils/namespace_manager_test.go | 24 +++++++++++++++++++ 6 files changed, 54 insertions(+), 18 deletions(-) create mode 100644 doc/thinking/2026-04-26-namespace-manager-step51.md diff --git a/doc/thinking/2026-04-26-namespace-manager-step51.md b/doc/thinking/2026-04-26-namespace-manager-step51.md new file mode 100644 index 00000000..ed7b5e8b --- /dev/null +++ b/doc/thinking/2026-04-26-namespace-manager-step51.md @@ -0,0 +1,18 @@ +# 2026-04-26 — NamespaceManager rewrite, step 51 + +## Цель шага + +Убрать из call sites повторение стандартного config для managed namespace watcher-а. + +## Что меняем + +1. Добавляем `NewDefaultManagedNamespaceWatcherConfig()`. +2. Helper подставляет: + - `DefaultNSResolver().Snapshot()`; + - `track-only` как default removal strategy. +3. `buildermgr`, `router`, `executor/multitenant` используют helper. + +## Что НЕ меняем + +- не меняем runtime semantics; +- не меняем subscriber logic. \ No newline at end of file diff --git a/pkg/buildermgr/ns_watcher.go b/pkg/buildermgr/ns_watcher.go index d4189119..4b2f37f8 100644 --- a/pkg/buildermgr/ns_watcher.go +++ b/pkg/buildermgr/ns_watcher.go @@ -25,12 +25,7 @@ func StartNSWatcher( pkgw *packageWatcher, mgr manager.Interface, ) { - _, err := utils.RunManagedNamespaceWatcher(ctx, logger, kubeClient, mgr, utils.ManagedNamespaceWatcherConfig{ - Component: "buildermgr.NSWatcher", - Namespaces: utils.DefaultNSResolver().Snapshot(), - RemovalStrategy: utils.NamespaceRemovalStrategyTrackOnly, - Subscriber: NewNamespaceSubscriber(envw, pkgw, mgr), - }) + _, err := utils.RunManagedNamespaceWatcher(ctx, logger, kubeClient, mgr, utils.NewDefaultManagedNamespaceWatcherConfig("buildermgr.NSWatcher", NewNamespaceSubscriber(envw, pkgw, mgr))) if err != nil { logger.Error("buildermgr.NSWatcher: BootstrapAndDispatch failed", zap.Error(err)) } diff --git a/pkg/executor/multitenant/ns_watcher.go b/pkg/executor/multitenant/ns_watcher.go index dfde458e..0630e7f6 100644 --- a/pkg/executor/multitenant/ns_watcher.go +++ b/pkg/executor/multitenant/ns_watcher.go @@ -86,12 +86,7 @@ func StartNSWatcher( executorTypes map[fv1.ExecutorType]executortype.ExecutorType, mgr manager.Interface, ) { - _, err := utils.RunManagedNamespaceWatcher(ctx, logger, kubernetesClient, mgr, utils.ManagedNamespaceWatcherConfig{ - Component: "multitenant.NSWatcher", - Namespaces: utils.DefaultNSResolver().Snapshot(), - RemovalStrategy: utils.NamespaceRemovalStrategyTrackOnly, - Subscriber: NewNamespaceSubscriber(logger, kubernetesClient, executorTypes, mgr), - }) + _, err := utils.RunManagedNamespaceWatcher(ctx, logger, kubernetesClient, mgr, utils.NewDefaultManagedNamespaceWatcherConfig("multitenant.NSWatcher", NewNamespaceSubscriber(logger, kubernetesClient, executorTypes, mgr))) if err != nil { logger.Error("multitenant.NSWatcher: BootstrapAndDispatch failed", zap.Error(err)) } diff --git a/pkg/router/ns_watcher.go b/pkg/router/ns_watcher.go index e8669219..5c93f799 100644 --- a/pkg/router/ns_watcher.go +++ b/pkg/router/ns_watcher.go @@ -24,12 +24,7 @@ func StartNSWatcher( ts *HTTPTriggerSet, mgr manager.Interface, ) { - _, err := utils.RunManagedNamespaceWatcher(ctx, logger, kubeClient, mgr, utils.ManagedNamespaceWatcherConfig{ - Component: "router.NSWatcher", - Namespaces: utils.DefaultNSResolver().Snapshot(), - RemovalStrategy: utils.NamespaceRemovalStrategyTrackOnly, - Subscriber: NewNamespaceSubscriber(ts, mgr), - }) + _, err := utils.RunManagedNamespaceWatcher(ctx, logger, kubeClient, mgr, utils.NewDefaultManagedNamespaceWatcherConfig("router.NSWatcher", NewNamespaceSubscriber(ts, mgr))) if err != nil { logger.Error("router.NSWatcher: BootstrapAndDispatch failed", zap.Error(err)) } diff --git a/pkg/utils/namespace_manager.go b/pkg/utils/namespace_manager.go index 313d50f9..9415b76f 100644 --- a/pkg/utils/namespace_manager.go +++ b/pkg/utils/namespace_manager.go @@ -110,6 +110,15 @@ func NewWatcherNamespaceManager(ctx context.Context, namespaces []string, source return manager, err } +func NewDefaultManagedNamespaceWatcherConfig(component string, subscriber NamespaceSubscriber) ManagedNamespaceWatcherConfig { + return ManagedNamespaceWatcherConfig{ + Component: component, + Namespaces: DefaultNSResolver().Snapshot(), + RemovalStrategy: NamespaceRemovalStrategyTrackOnly, + Subscriber: subscriber, + } +} + func PrepareManagedNamespaceWatcher(ctx context.Context, logger *zap.Logger, config ManagedNamespaceWatcherConfig) (NamespaceManager, k8sCache.ResourceEventHandlerFuncs, error) { strategy := config.RemovalStrategy if strategy == "" { diff --git a/pkg/utils/namespace_manager_test.go b/pkg/utils/namespace_manager_test.go index 7ef7d63d..134a356c 100644 --- a/pkg/utils/namespace_manager_test.go +++ b/pkg/utils/namespace_manager_test.go @@ -485,6 +485,30 @@ func TestRunManagedNamespaceWatcher(t *testing.T) { } } +func TestNewDefaultManagedNamespaceWatcherConfig(t *testing.T) { + resolver := DefaultNSResolver() + original := resolver.FissionResourceNS + resolver.FissionResourceNS = map[string]string{"tenant-a": "tenant-a"} + defer func() { + resolver.FissionResourceNS = original + }() + + router := &testNamespaceSubscriber{name: "router"} + config := NewDefaultManagedNamespaceWatcherConfig("router.NSWatcher", router) + if config.Component != "router.NSWatcher" { + t.Fatalf("expected component name to be preserved") + } + if config.RemovalStrategy != NamespaceRemovalStrategyTrackOnly { + t.Fatalf("expected default removal strategy track-only") + } + if !reflect.DeepEqual([]string{"tenant-a"}, config.Namespaces) { + t.Fatalf("expected namespaces from resolver snapshot") + } + if config.Subscriber != router { + t.Fatalf("expected subscriber to be preserved") + } +} + func TestPrepareManagedNamespaceWatcherDefaultsToTrackOnly(t *testing.T) { router := &testNamespaceSubscriber{name: "router"} logger := zap.NewNop()