···1616}17171818type Config struct {1919- Server Server `env:",prefix=SPINDLE_SERVER_"`2020- Knots []string `env:"SPINDLE_SUBSCRIBED_KNOTS,required"`1919+ Server Server `env:",prefix=SPINDLE_SERVER_"`2120}22212322func Load(ctx context.Context) (*Config, error) {
+13-9
spindle/server.go
···3535 eng *engine.Engine3636 jq *queue.Queue3737 cfg *config.Config3838+ ks *knotclient.EventConsumer3839}39404041func Run(ctx context.Context) error {···8382 cfg: cfg,8483 }85848686- err = e.AddDomain(rbacDomain)8585+ err = e.AddKnot(rbacDomain)8786 if err != nil {8887 return fmt.Errorf("failed to set rbac domain: %w", err)8988 }···110109 // for each incoming sh.tangled.pipeline, we execute111110 // spindle.processPipeline, which in turn enqueues the pipeline112111 // job in the above registered queue.113113-114112 ccfg := knotclient.NewConsumerConfig()115113 ccfg.Logger = logger116114 ccfg.Dev = cfg.Server.Dev117115 ccfg.ProcessFunc = spindle.processPipeline118116 ccfg.CursorStore = cursorStore119119- for _, knot := range spindle.cfg.Knots {120120- kes := knotclient.NewEventSource(knot)121121- ccfg.AddEventSource(kes)117117+ knotstream := knotclient.NewEventConsumer(*ccfg)118118+ knownKnots, err := d.Knots()119119+ if err != nil {120120+ return err122121 }123123- ec := knotclient.NewEventConsumer(*ccfg)122122+ for _, knot := range knownKnots {123123+ knotstream.AddSource(ctx, knotclient.NewEventSource(knot))124124+ }125125+ spindle.ks = knotstream124126125127 go func() {126126- logger.Info("starting knot event consumer", "knots", spindle.cfg.Knots)127127- ec.Start(ctx)128128+ logger.Info("starting knot event consumer", "knots")129129+ knotstream.Start(ctx)128130 }()129131130132 logger.Info("starting spindle server", "address", cfg.Server.ListenAddr)···197193 }198194199195 if len(serverOwner) == 0 {200200- s.e.AddOwner(rbacDomain, cfgOwner)196196+ s.e.AddKnotOwner(rbacDomain, cfgOwner)201197 } else {202198 if serverOwner[0] != cfgOwner {203199 return fmt.Errorf("server owner mismatch: %s != %s", cfgOwner, serverOwner[0])