@@ -33,6 +33,7 @@ import (
3333 genericerrs "github.com/uber/submitqueue/core/errs/generic"
3434 mysqlerrs "github.com/uber/submitqueue/core/errs/mysql"
3535 "github.com/uber/submitqueue/core/httpclient"
36+ sharedentity "github.com/uber/submitqueue/entity"
3637 extqueue "github.com/uber/submitqueue/extension/queue"
3738 queueMySQL "github.com/uber/submitqueue/extension/queue/mysql"
3839 "github.com/uber/submitqueue/submitqueue/core/consumer"
@@ -50,6 +51,8 @@ import (
5051 githubchecker "github.com/uber/submitqueue/submitqueue/extension/mergechecker/github"
5152 "github.com/uber/submitqueue/submitqueue/extension/pusher"
5253 gitpusher "github.com/uber/submitqueue/submitqueue/extension/pusher/git"
54+ "github.com/uber/submitqueue/submitqueue/extension/queueconfig"
55+ yamlqueueconfig "github.com/uber/submitqueue/submitqueue/extension/queueconfig/yaml"
5356 "github.com/uber/submitqueue/submitqueue/extension/scorer/heuristic"
5457 "github.com/uber/submitqueue/submitqueue/extension/storage"
5558 mysqlstorage "github.com/uber/submitqueue/submitqueue/extension/storage/mysql"
@@ -231,8 +234,14 @@ func run() error {
231234 // (every build immediately succeeds) until a real backend is wired in.
232235 br := buildnoop .New ()
233236
237+ // Create queue config store
238+ qcfg , err := newQueueConfigStore (logger )
239+ if err != nil {
240+ return fmt .Errorf ("failed to create queue config store: %w" , err )
241+ }
242+
234243 // Register controllers
235- if err := registerControllers (c , logger .Sugar (), scope , registry , mc , cp , psh , br , cnt , store , changeStore ); err != nil {
244+ if err := registerControllers (c , logger .Sugar (), scope , registry , mc , cp , psh , br , cnt , store , changeStore , qcfg ); err != nil {
236245 return err
237246 }
238247
@@ -425,7 +434,7 @@ func newTopicRegistry(q extqueue.Queue, subscriberName string) (consumer.TopicRe
425434// │ │ │
426435// └────────┴───────────────────────┘
427436
428- func registerControllers (c consumer.Consumer , logger * zap.SugaredLogger , scope tally.Scope , registry consumer.TopicRegistry , mc mergechecker.MergeChecker , cp changeprovider.ChangeProvider , psh pusher.Pusher , br buildrunner.BuildRunner , cnt counter.Counter , store storage.Storage , changeStore changestore.ChangeStore ) error {
437+ func registerControllers (c consumer.Consumer , logger * zap.SugaredLogger , scope tally.Scope , registry consumer.TopicRegistry , mc mergechecker.MergeChecker , cp changeprovider.ChangeProvider , psh pusher.Pusher , br buildrunner.BuildRunner , cnt counter.Counter , store storage.Storage , changeStore changestore.ChangeStore , qcfg queueconfig. Store ) error {
429438 requestController := start .NewController (
430439 logger ,
431440 scope ,
@@ -551,6 +560,7 @@ func registerControllers(c consumer.Consumer, logger *zap.SugaredLogger, scope t
551560 store ,
552561 registry ,
553562 psh ,
563+ qcfg ,
554564 consumer .TopicKeyMerge ,
555565 "orchestrator-merge" ,
556566 )
@@ -675,6 +685,18 @@ func newPusher(logger *zap.Logger, scope tally.Scope) (pusher.Pusher, error) {
675685 }), nil
676686}
677687
688+ // newQueueConfigStore loads queue configuration from a YAML file pointed to by
689+ // QUEUE_CONFIG_PATH. If the env var is not set, returns an empty store — the
690+ // merge controller will fail to resolve any queue target.
691+ func newQueueConfigStore (logger * zap.Logger ) (queueconfig.Store , error ) {
692+ path := os .Getenv ("QUEUE_CONFIG_PATH" )
693+ if path == "" {
694+ logger .Warn ("QUEUE_CONFIG_PATH not set; merge controller will fail to resolve queue targets" )
695+ return yamlqueueconfig.Store {}, nil
696+ }
697+ return yamlqueueconfig .NewStore (path )
698+ }
699+
678700// noopPusher is a fallback Pusher used when PUSHER_CHECKOUT_PATH is not
679701// configured. It returns an error on every Push so the merge controller
680702// (which treats non-ErrConflict errors as transient and nacks the message)
@@ -683,6 +705,6 @@ func newPusher(logger *zap.Logger, scope tally.Scope) (pusher.Pusher, error) {
683705// that don't run the merge step.
684706type noopPusher struct {}
685707
686- func (noopPusher ) Push (_ context.Context , _ []entity. Change ) (pusher.Result , error ) {
708+ func (noopPusher ) Push (_ context.Context , _ sharedentity. QueueTarget , _ []pusher. PushItem ) (pusher.Result , error ) {
687709 return pusher.Result {}, fmt .Errorf ("pusher not configured: set PUSHER_CHECKOUT_PATH to enable pushing" )
688710}
0 commit comments