layer1: add builder namespace subscriber step 20
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
# 2026-04-26 — NamespaceManager rewrite, step 20
|
||||
|
||||
## Цель шага
|
||||
|
||||
Сделать первый реальный runtime adapter для `NamespaceManager` в `buildermgr`.
|
||||
|
||||
## Что меняем
|
||||
|
||||
1. Добавляем buildermgr namespace subscriber.
|
||||
2. Adapter переиспользует существующие `envWatcher.AddNamespace()` и `packageWatcher.AddNamespace()`.
|
||||
3. `add/resync` path повторяет текущую логику watcher-а:
|
||||
- добавить namespace в resolver;
|
||||
- вызвать env watcher;
|
||||
- вызвать package watcher.
|
||||
4. Добавляем unit test на вызов обоих watcher-ов.
|
||||
|
||||
## Что НЕ меняем
|
||||
|
||||
- не подключаем subscriber к `StartNSWatcher()`;
|
||||
- не меняем remove behavior;
|
||||
- не ломаем текущий production flow.
|
||||
@@ -0,0 +1,44 @@
|
||||
package buildermgr
|
||||
package buildermgr
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/fission/fission/pkg/utils"
|
||||
"github.com/fission/fission/pkg/utils/manager"
|
||||
)
|
||||
|
||||
type builderEnvNamespaceAdder interface {
|
||||
AddNamespace(ctx context.Context, ns string, mgr manager.Interface)
|
||||
}
|
||||
|
||||
type builderPkgNamespaceAdder interface {
|
||||
AddNamespace(ctx context.Context, ns string, mgr manager.Interface)
|
||||
}
|
||||
|
||||
func NewNamespaceSubscriber(envw builderEnvNamespaceAdder, pkgw builderPkgNamespaceAdder, mgr manager.Interface) utils.NamespaceSubscriber {
|
||||
return utils.NamespaceSubscriberFuncs{
|
||||
SubscriberName: "buildermgr",
|
||||
AddFunc: func(ctx context.Context, record utils.NamespaceRecord) error {
|
||||
registerBuilderNamespace(ctx, record.Name, envw, pkgw, mgr)
|
||||
return nil
|
||||
},
|
||||
ResyncFunc: func(ctx context.Context, record utils.NamespaceRecord) error {
|
||||
registerBuilderNamespace(ctx, record.Name, envw, pkgw, mgr)
|
||||
return nil
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func registerBuilderNamespace(ctx context.Context, namespace string, envw builderEnvNamespaceAdder, pkgw builderPkgNamespaceAdder, mgr manager.Interface) {
|
||||
if namespace == "" {
|
||||
return
|
||||
}
|
||||
utils.DefaultNSResolver().AddNamespace(namespace)
|
||||
if envw != nil {
|
||||
envw.AddNamespace(ctx, namespace, mgr)
|
||||
}
|
||||
if pkgw != nil {
|
||||
pkgw.AddNamespace(ctx, namespace, mgr)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package buildermgr
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/fission/fission/pkg/utils"
|
||||
"github.com/fission/fission/pkg/utils/manager"
|
||||
)
|
||||
|
||||
type fakeBuilderEnvNamespaceAdder struct {
|
||||
lastNamespace string
|
||||
calls int
|
||||
}
|
||||
|
||||
func (f *fakeBuilderEnvNamespaceAdder) AddNamespace(ctx context.Context, ns string, mgr manager.Interface) {
|
||||
f.lastNamespace = ns
|
||||
f.calls++
|
||||
}
|
||||
|
||||
type fakeBuilderPkgNamespaceAdder struct {
|
||||
lastNamespace string
|
||||
calls int
|
||||
}
|
||||
|
||||
func (f *fakeBuilderPkgNamespaceAdder) AddNamespace(ctx context.Context, ns string, mgr manager.Interface) {
|
||||
f.lastNamespace = ns
|
||||
f.calls++
|
||||
}
|
||||
|
||||
func TestNewNamespaceSubscriberAddAndResync(t *testing.T) {
|
||||
envw := &fakeBuilderEnvNamespaceAdder{}
|
||||
pkgw := &fakeBuilderPkgNamespaceAdder{}
|
||||
subscriber := NewNamespaceSubscriber(envw, pkgw, nil)
|
||||
record := utils.NamespaceRecord{Name: "tenant-builder-a"}
|
||||
|
||||
if subscriber.Name() != "buildermgr" {
|
||||
t.Fatalf("expected buildermgr subscriber name")
|
||||
}
|
||||
if err := subscriber.OnNamespaceAdd(context.Background(), record); err != nil {
|
||||
t.Fatalf("expected add to succeed: %v", err)
|
||||
}
|
||||
if err := subscriber.OnNamespaceResync(context.Background(), record); err != nil {
|
||||
t.Fatalf("expected resync to succeed: %v", err)
|
||||
}
|
||||
if envw.calls != 2 || pkgw.calls != 2 {
|
||||
t.Fatalf("expected both watchers to be called for add and resync")
|
||||
}
|
||||
if envw.lastNamespace != "tenant-builder-a" || pkgw.lastNamespace != "tenant-builder-a" {
|
||||
t.Fatalf("expected namespace to be forwarded to both watchers")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user