diff --git a/doc/thinking/2026-04-26-namespace-manager-step32.md b/doc/thinking/2026-04-26-namespace-manager-step32.md new file mode 100644 index 00000000..5fd6ee5d --- /dev/null +++ b/doc/thinking/2026-04-26-namespace-manager-step32.md @@ -0,0 +1,15 @@ +# 2026-04-26 — NamespaceManager rewrite, step 32 + +## Цель шага + +Закрыть startup gap в `executor/multitenant`: manager должен отражать стартовые namespace-ы и прогонять их через тот же subscriber path. + +## Что меняем + +1. `StartNSWatcher()` создаёт пустой `NamespaceManager`. +2. После `Subscribe()` выполняется `BootstrapAndDispatch()` по snapshot resolver-а. + +## Что НЕ меняем + +- не меняем `registerNamespace()`; +- не добавляем remove path. \ No newline at end of file diff --git a/pkg/executor/multitenant/ns_watcher.go b/pkg/executor/multitenant/ns_watcher.go index 6a41e712..973f43da 100644 --- a/pkg/executor/multitenant/ns_watcher.go +++ b/pkg/executor/multitenant/ns_watcher.go @@ -93,8 +93,11 @@ func StartNSWatcher( executorTypes map[fv1.ExecutorType]executortype.ExecutorType, mgr manager.Interface, ) { - nsManager := utils.NewBootstrappedNamespaceManager(utils.DefaultNSResolver(), utils.NamespaceSourceEnv, time.Now().UTC()) + nsManager := utils.NewNamespaceManager() nsManager.Subscribe(NewNamespaceSubscriber(logger, kubernetesClient, executorTypes, mgr)) + if _, err := nsManager.BootstrapAndDispatch(ctx, utils.DefaultNSResolver().Snapshot(), utils.NamespaceSourceEnv, time.Now().UTC()); 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