layer1: hook router watcher to namespace manager
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
# 2026-04-26 — NamespaceManager rewrite, step 28
|
||||||
|
|
||||||
|
## Цель шага
|
||||||
|
|
||||||
|
Сделать такой же runtime hook на `NamespaceManager` в `router` watcher.
|
||||||
|
|
||||||
|
## Что меняем
|
||||||
|
|
||||||
|
1. `router.StartNSWatcher()` поднимает локальный `NamespaceManager`.
|
||||||
|
2. Manager bootstrapped из текущего resolver snapshot.
|
||||||
|
3. Watcher `Add/Update` события прогоняет через:
|
||||||
|
- `Upsert()`
|
||||||
|
- `DispatchAdd()` или `DispatchResync()`
|
||||||
|
4. Подписчиком manager-а становится router subscriber adapter.
|
||||||
|
|
||||||
|
## Что НЕ меняем
|
||||||
|
|
||||||
|
- не добавляем remove path;
|
||||||
|
- не меняем `HTTPTriggerSet.AddNamespace()`.
|
||||||
@@ -30,6 +30,9 @@ func StartNSWatcher(
|
|||||||
ts *HTTPTriggerSet,
|
ts *HTTPTriggerSet,
|
||||||
mgr manager.Interface,
|
mgr manager.Interface,
|
||||||
) {
|
) {
|
||||||
|
nsManager := utils.NewBootstrappedNamespaceManager(utils.DefaultNSResolver(), utils.NamespaceSourceEnv, time.Now().UTC())
|
||||||
|
nsManager.Subscribe(NewNamespaceSubscriber(ts, mgr))
|
||||||
|
|
||||||
factory := k8sInformers.NewSharedInformerFactoryWithOptions(
|
factory := k8sInformers.NewSharedInformerFactoryWithOptions(
|
||||||
kubeClient,
|
kubeClient,
|
||||||
30*time.Minute,
|
30*time.Minute,
|
||||||
@@ -42,13 +45,14 @@ func StartNSWatcher(
|
|||||||
|
|
||||||
_, _ = nsInformer.AddEventHandler(k8sCache.ResourceEventHandlerFuncs{
|
_, _ = nsInformer.AddEventHandler(k8sCache.ResourceEventHandlerFuncs{
|
||||||
AddFunc: func(obj interface{}) {
|
AddFunc: func(obj interface{}) {
|
||||||
ns := routerNSName(obj)
|
nsObj, ok := obj.(*corev1.Namespace)
|
||||||
if ns == "" {
|
if !ok || nsObj.Name == "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := registerRouterNamespace(ctx, ns, ts, mgr); err != nil {
|
nsManager.Upsert(utils.NamespaceEventFromNamespace(utils.NamespaceEventAdd, nsObj, utils.NamespaceSourceWatcher, time.Now().UTC()))
|
||||||
logger.Error("router.NSWatcher: AddNamespace failed",
|
if _, _, err := nsManager.DispatchAdd(ctx, nsObj.Name); err != nil {
|
||||||
zap.String("namespace", ns), zap.Error(err))
|
logger.Error("router.NSWatcher: DispatchAdd failed",
|
||||||
|
zap.String("namespace", nsObj.Name), zap.Error(err))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
UpdateFunc: func(_, newObj interface{}) {
|
UpdateFunc: func(_, newObj interface{}) {
|
||||||
@@ -56,8 +60,9 @@ func StartNSWatcher(
|
|||||||
if !ok || !utils.IsManagedNamespace(nsObj.Labels) {
|
if !ok || !utils.IsManagedNamespace(nsObj.Labels) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := registerRouterNamespace(ctx, nsObj.Name, ts, mgr); err != nil {
|
nsManager.Upsert(utils.NamespaceEventFromNamespace(utils.NamespaceEventUpdate, nsObj, utils.NamespaceSourceWatcher, time.Now().UTC()))
|
||||||
logger.Error("router.NSWatcher: AddNamespace failed",
|
if _, _, err := nsManager.DispatchResync(ctx, nsObj.Name); err != nil {
|
||||||
|
logger.Error("router.NSWatcher: DispatchResync failed",
|
||||||
zap.String("namespace", nsObj.Name), zap.Error(err))
|
zap.String("namespace", nsObj.Name), zap.Error(err))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user