fix(namespace): executor/router/buildermgr RemoveNamespace + per-NS informer lifecycle
- Add RemoveNamespace(ctx, ns) to executortype.ExecutorType interface - Implement RemoveNamespace in poolmgr, newdeploy, container executor types - Add per-namespace context cancellation (nsCancels map) in all three types so informer factories are stopped when namespace is removed (fixes goroutine leak) - Add PoolPodController.RemoveNamespace to clear envLister/podLister maps - Add deregisterNamespace() in executor multitenant subscriber - Switch executor/router/buildermgr watcher strategy from TrackOnly to DispatchRemove so RemoveFunc is called when fission.io/managed label is removed - Add RemoveFunc to executor/router/buildermgr namespace subscribers - Add RemoveNamespace to environmentWatcher and packageWatcher with per-NS cancel - Add RemoveNamespace to HTTPTriggerSet: cancels informers, removes from maps, calls syncTriggers - Fix ns_watcher_test.go fakeExecutorType to implement new RemoveNamespace method Fixes: - Executor dedup gap: re-added namespace was silently skipped (envLister/deplLister still present) - Goroutine/FD leak: old informer factories ran forever after namespace removal - Router stale routes: HTTPTriggers for removed namespace stayed in routing table
This commit is contained in:
@@ -11,10 +11,18 @@ type builderEnvNamespaceAdder interface {
|
||||
AddNamespace(ctx context.Context, ns string, mgr manager.Interface)
|
||||
}
|
||||
|
||||
type builderEnvNamespaceRemover interface {
|
||||
RemoveNamespace(ns string)
|
||||
}
|
||||
|
||||
type builderPkgNamespaceAdder interface {
|
||||
AddNamespace(ctx context.Context, ns string, mgr manager.Interface)
|
||||
}
|
||||
|
||||
type builderPkgNamespaceRemover interface {
|
||||
RemoveNamespace(ns string)
|
||||
}
|
||||
|
||||
func NewNamespaceSubscriber(envw builderEnvNamespaceAdder, pkgw builderPkgNamespaceAdder, mgr manager.Interface) utils.NamespaceSubscriber {
|
||||
return utils.NamespaceSubscriberFuncs{
|
||||
SubscriberName: "buildermgr",
|
||||
@@ -22,6 +30,10 @@ func NewNamespaceSubscriber(envw builderEnvNamespaceAdder, pkgw builderPkgNamesp
|
||||
registerBuilderNamespace(ctx, record.Name, envw, pkgw, mgr)
|
||||
return nil
|
||||
},
|
||||
RemoveFunc: func(ctx context.Context, record utils.NamespaceRecord) error {
|
||||
deregisterBuilderNamespace(record.Name, envw, pkgw)
|
||||
return nil
|
||||
},
|
||||
ResyncFunc: func(ctx context.Context, record utils.NamespaceRecord) error {
|
||||
registerBuilderNamespace(ctx, record.Name, envw, pkgw, mgr)
|
||||
return nil
|
||||
@@ -41,3 +53,16 @@ func registerBuilderNamespace(ctx context.Context, namespace string, envw builde
|
||||
pkgw.AddNamespace(ctx, namespace, mgr)
|
||||
}
|
||||
}
|
||||
|
||||
func deregisterBuilderNamespace(namespace string, envw builderEnvNamespaceAdder, pkgw builderPkgNamespaceAdder) {
|
||||
if namespace == "" {
|
||||
return
|
||||
}
|
||||
utils.DefaultNSResolver().RemoveNamespace(namespace)
|
||||
if r, ok := envw.(builderEnvNamespaceRemover); ok {
|
||||
r.RemoveNamespace(namespace)
|
||||
}
|
||||
if r, ok := pkgw.(builderPkgNamespaceRemover); ok {
|
||||
r.RemoveNamespace(namespace)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user