X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/3c87fb14f48b78d30142f12c8cb855dba92c926d..c57b6ac55b1eaeae3786d1d83158f22e3d8e253f:/lib/boot/supervisor.go diff --git a/lib/boot/supervisor.go b/lib/boot/supervisor.go index ddc17953d2..67649e75de 100644 --- a/lib/boot/supervisor.go +++ b/lib/boot/supervisor.go @@ -61,8 +61,7 @@ type Supervisor struct { // explicitly configured in config file. If blank, use a // random port on ListenHost. ControllerAddr string - // Path to arvados-workbench2 source tree checkout. - Workbench2Source string + NoWorkbench1 bool NoWorkbench2 bool OwnTemporaryDatabase bool @@ -112,7 +111,7 @@ func (super *Supervisor) Start(ctx context.Context) { super.ctx, super.cancel = context.WithCancel(ctx) super.done = make(chan struct{}) - sigch := make(chan os.Signal) + sigch := make(chan os.Signal, 1) signal.Notify(sigch, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP) go func() { defer signal.Stop(sigch) @@ -205,15 +204,24 @@ func (super *Supervisor) Wait() error { func (super *Supervisor) startFederation(cfg *arvados.Config) { super.children = map[string]*Supervisor{} for id, cc := range cfg.Clusters { - super2 := *super yaml, err := json.Marshal(arvados.Config{Clusters: map[string]arvados.Cluster{id: cc}}) if err != nil { panic(fmt.Sprintf("json.Marshal partial config: %s", err)) } - super2.ConfigYAML = string(yaml) - super2.ConfigPath = "-" - super2.children = nil - + super2 := &Supervisor{ + ConfigPath: "-", + ConfigYAML: string(yaml), + SourcePath: super.SourcePath, + SourceVersion: super.SourceVersion, + ClusterType: super.ClusterType, + ListenHost: super.ListenHost, + ControllerAddr: super.ControllerAddr, + NoWorkbench1: super.NoWorkbench1, + NoWorkbench2: super.NoWorkbench2, + OwnTemporaryDatabase: super.OwnTemporaryDatabase, + Stdin: super.Stdin, + Stderr: super.Stderr, + } if super2.ClusterType == "test" { super2.Stderr = &service.LogPrefixer{ Writer: super.Stderr, @@ -221,7 +229,7 @@ func (super *Supervisor) startFederation(cfg *arvados.Config) { } } super2.Start(super.ctx) - super.children[id] = &super2 + super.children[id] = super2 } } @@ -282,7 +290,7 @@ func (super *Supervisor) runCluster() error { if err != nil { return err } - conffile, err := os.OpenFile(filepath.Join(super.wwwtempdir, "config.yml"), os.O_CREATE|os.O_WRONLY, 0644) + conffile, err := os.OpenFile(filepath.Join(super.wwwtempdir, "config.yml"), os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) if err != nil { return err } @@ -308,6 +316,7 @@ func (super *Supervisor) runCluster() error { if super.ClusterType != "production" { super.prependEnv("PATH", super.tempdir+"/bin:") } + super.setEnv("ARVADOS_SERVER_ADDRESS", super.ListenHost) // Now that we have the config, replace the bootstrap logger // with a new one according to the logging config. @@ -324,13 +333,13 @@ func (super *Supervisor) runCluster() error { } else if super.SourceVersion == "" { // Find current source tree version. var buf bytes.Buffer - err = super.RunProgram(super.ctx, ".", runOptions{output: &buf}, "git", "diff", "--shortstat") + err = super.RunProgram(super.ctx, super.SourcePath, runOptions{output: &buf}, "git", "diff", "--shortstat") if err != nil { return err } dirty := buf.Len() > 0 buf.Reset() - err = super.RunProgram(super.ctx, ".", runOptions{output: &buf}, "git", "log", "-n1", "--format=%H") + err = super.RunProgram(super.ctx, super.SourcePath, runOptions{output: &buf}, "git", "log", "-n1", "--format=%H") if err != nil { return err } @@ -355,22 +364,22 @@ func (super *Supervisor) runCluster() error { createCertificates{}, runPostgreSQL{}, runNginx{}, - runServiceCommand{name: "controller", svc: super.cluster.Services.Controller, depends: []supervisedTask{seedDatabase{}}}, - runServiceCommand{name: "git-httpd", svc: super.cluster.Services.GitHTTP}, + railsDatabase{}, + runServiceCommand{name: "controller", svc: super.cluster.Services.Controller, depends: []supervisedTask{railsDatabase{}}}, runServiceCommand{name: "health", svc: super.cluster.Services.Health}, runServiceCommand{name: "keepproxy", svc: super.cluster.Services.Keepproxy, depends: []supervisedTask{runPassenger{src: "services/api"}}}, runServiceCommand{name: "keepstore", svc: super.cluster.Services.Keepstore}, runServiceCommand{name: "keep-web", svc: super.cluster.Services.WebDAV}, - runServiceCommand{name: "ws", svc: super.cluster.Services.Websocket, depends: []supervisedTask{seedDatabase{}}}, + runServiceCommand{name: "ws", svc: super.cluster.Services.Websocket, depends: []supervisedTask{railsDatabase{}}}, installPassenger{src: "services/api", varlibdir: "railsapi"}, - runPassenger{src: "services/api", varlibdir: "railsapi", svc: super.cluster.Services.RailsAPI, depends: []supervisedTask{createCertificates{}, seedDatabase{}, installPassenger{src: "services/api", varlibdir: "railsapi"}}}, - seedDatabase{}, + runPassenger{src: "services/api", varlibdir: "railsapi", svc: super.cluster.Services.RailsAPI, depends: []supervisedTask{ + createCertificates{}, + installPassenger{src: "services/api", varlibdir: "railsapi"}, + railsDatabase{}, + }}, } if !super.NoWorkbench1 { - tasks = append(tasks, - installPassenger{src: "apps/workbench", varlibdir: "workbench1", depends: []supervisedTask{seedDatabase{}}}, // dependency ensures workbench doesn't delay api install/startup - runPassenger{src: "apps/workbench", varlibdir: "workbench1", svc: super.cluster.Services.Workbench1, depends: []supervisedTask{installPassenger{src: "apps/workbench", varlibdir: "workbench1"}}}, - ) + return errors.New("workbench1 is no longer supported") } if !super.NoWorkbench2 { tasks = append(tasks, @@ -811,7 +820,6 @@ func (super *Supervisor) autofillConfig() error { for _, svc := range []*arvados.Service{ &super.cluster.Services.Controller, &super.cluster.Services.DispatchCloud, - &super.cluster.Services.GitHTTP, &super.cluster.Services.Health, &super.cluster.Services.Keepproxy, &super.cluster.Services.Keepstore, @@ -829,7 +837,6 @@ func (super *Supervisor) autofillConfig() error { } host := net.JoinHostPort(defaultExtHost, port) if svc == &super.cluster.Services.Controller || - svc == &super.cluster.Services.GitHTTP || svc == &super.cluster.Services.Health || svc == &super.cluster.Services.Keepproxy || svc == &super.cluster.Services.WebDAV || @@ -844,7 +851,7 @@ func (super *Supervisor) autofillConfig() error { if super.NoWorkbench1 && svc == &super.cluster.Services.Workbench1 || super.NoWorkbench2 && svc == &super.cluster.Services.Workbench2 || !super.cluster.Containers.CloudVMs.Enable && svc == &super.cluster.Services.DispatchCloud { - // When workbench1 is disabled, it gets an + // When Workbench is disabled, it gets an // ExternalURL (so we have a valid listening // port to write in our Nginx config) but no // InternalURLs (so health checker doesn't