[ARVADOS] created: 2.1.0-713-g67f36fe02

Git user git at public.arvados.org
Tue Apr 20 20:01:15 UTC 2021


        at  67f36fe024cc54c19dd4d2fe8fb09f225e7006a5 (commit)


commit 67f36fe024cc54c19dd4d2fe8fb09f225e7006a5
Author: Tom Clegg <tom at curii.com>
Date:   Tue Apr 20 15:55:27 2021 -0400

    16306: Add option to boot without workbench1 to speed up tests.
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom at curii.com>

diff --git a/lib/boot/cmd.go b/lib/boot/cmd.go
index 963d16226..001504e20 100644
--- a/lib/boot/cmd.go
+++ b/lib/boot/cmd.go
@@ -66,6 +66,7 @@ func (bcmd bootCommand) run(ctx context.Context, prog string, args []string, std
 	flags.StringVar(&super.ClusterType, "type", "production", "cluster `type`: development, test, or production")
 	flags.StringVar(&super.ListenHost, "listen-host", "localhost", "host name or interface address for service listeners")
 	flags.StringVar(&super.ControllerAddr, "controller-address", ":0", "desired controller address, `host:port` or `:port`")
+	flags.BoolVar(&super.NoWorkbench1, "no-workbench1", false, "do not run workbench1")
 	flags.BoolVar(&super.OwnTemporaryDatabase, "own-temporary-database", false, "bring up a postgres server and create a temporary database")
 	timeout := flags.Duration("timeout", 0, "maximum time to wait for cluster to be ready")
 	shutdown := flags.Bool("shutdown", false, "shut down when the cluster becomes ready")
diff --git a/lib/boot/nginx.go b/lib/boot/nginx.go
index dc4aebd52..5826e5c01 100644
--- a/lib/boot/nginx.go
+++ b/lib/boot/nginx.go
@@ -53,12 +53,17 @@ func (runNginx) Run(ctx context.Context, fail func(error), super *Supervisor) er
 		{"WORKBENCH1", super.cluster.Services.Workbench1},
 		{"WS", super.cluster.Services.Websocket},
 	} {
-		host, port, err := internalPort(cmpt.svc)
-		if err != nil {
+		var host, port string
+		if len(cmpt.svc.InternalURLs) == 0 {
+			// We won't run this service, but we need an
+			// upstream port to write in our templated
+			// nginx config. Choose a port that will
+			// return 502 Bad Gateway.
+			port = "9"
+		} else if host, port, err = internalPort(cmpt.svc); err != nil {
 			return fmt.Errorf("%s internal port: %w (%v)", cmpt.varname, err, cmpt.svc)
-		}
-		if ok, err := addrIsLocal(net.JoinHostPort(host, port)); !ok || err != nil {
-			return fmt.Errorf("urlIsLocal() failed for host %q port %q: %v", host, port, err)
+		} else if ok, err := addrIsLocal(net.JoinHostPort(host, port)); !ok || err != nil {
+			return fmt.Errorf("%s addrIsLocal() failed for host %q port %q: %v", cmpt.varname, host, port, err)
 		}
 		vars[cmpt.varname+"PORT"] = port
 
@@ -66,8 +71,9 @@ func (runNginx) Run(ctx context.Context, fail func(error), super *Supervisor) er
 		if err != nil {
 			return fmt.Errorf("%s external port: %w (%v)", cmpt.varname, err, cmpt.svc)
 		}
-		if ok, err := addrIsLocal(net.JoinHostPort(super.ListenHost, port)); !ok || err != nil {
-			return fmt.Errorf("urlIsLocal() failed for host %q port %q: %v", super.ListenHost, port, err)
+		listenAddr := net.JoinHostPort(super.ListenHost, port)
+		if ok, err := addrIsLocal(listenAddr); !ok || err != nil {
+			return fmt.Errorf("%s addrIsLocal(%q) failed: %w", cmpt.varname, listenAddr, err)
 		}
 		vars[cmpt.varname+"SSLPORT"] = port
 	}
diff --git a/lib/boot/supervisor.go b/lib/boot/supervisor.go
index 961ed55de..0f497a443 100644
--- a/lib/boot/supervisor.go
+++ b/lib/boot/supervisor.go
@@ -42,6 +42,7 @@ type Supervisor struct {
 	ClusterType          string // e.g., production
 	ListenHost           string // e.g., localhost
 	ControllerAddr       string // e.g., 127.0.0.1:8000
+	NoWorkbench1         bool
 	OwnTemporaryDatabase bool
 	Stderr               io.Writer
 
@@ -249,10 +250,14 @@ func (super *Supervisor) run(cfg *arvados.Config) error {
 		runServiceCommand{name: "ws", svc: super.cluster.Services.Websocket, depends: []supervisedTask{seedDatabase{}}},
 		installPassenger{src: "services/api"},
 		runPassenger{src: "services/api", varlibdir: "railsapi", svc: super.cluster.Services.RailsAPI, depends: []supervisedTask{createCertificates{}, seedDatabase{}, installPassenger{src: "services/api"}}},
-		installPassenger{src: "apps/workbench", 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"}}},
 		seedDatabase{},
 	}
+	if !super.NoWorkbench1 {
+		tasks = append(tasks,
+			installPassenger{src: "apps/workbench", 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"}}},
+		)
+	}
 	if super.ClusterType != "test" {
 		tasks = append(tasks,
 			runServiceCommand{name: "dispatch-cloud", svc: super.cluster.Services.DispatchCloud},
@@ -678,6 +683,14 @@ func (super *Supervisor) autofillConfig(cfg *arvados.Config) error {
 				svc.ExternalURL = arvados.URL{Scheme: "wss", Host: fmt.Sprintf("%s:%s", super.ListenHost, nextPort(super.ListenHost)), Path: "/websocket"}
 			}
 		}
+		if super.NoWorkbench1 && svc == &cluster.Services.Workbench1 {
+			// When workbench1 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
+			// complain).
+			continue
+		}
 		if len(svc.InternalURLs) == 0 {
 			svc.InternalURLs = map[arvados.URL]arvados.ServiceInstance{
 				{Scheme: "http", Host: fmt.Sprintf("%s:%s", super.ListenHost, nextPort(super.ListenHost)), Path: "/"}: {},
diff --git a/lib/controller/integration_test.go b/lib/controller/integration_test.go
index aeaede427..7b1dcbea6 100644
--- a/lib/controller/integration_test.go
+++ b/lib/controller/integration_test.go
@@ -130,8 +130,9 @@ func (s *IntegrationSuite) SetUpSuite(c *check.C) {
 		tc := boot.NewTestCluster(
 			filepath.Join(cwd, "..", ".."),
 			id, cfg, "127.0.0."+id[3:], c.Log)
+		tc.Super.NoWorkbench1 = true
+		tc.Start()
 		s.testClusters[id] = tc
-		s.testClusters[id].Start()
 	}
 	for _, tc := range s.testClusters {
 		ok := tc.WaitReady()
diff --git a/tools/sync-groups/federation_test.go b/tools/sync-groups/federation_test.go
index aebac21de..1bbdaa3fa 100644
--- a/tools/sync-groups/federation_test.go
+++ b/tools/sync-groups/federation_test.go
@@ -114,8 +114,9 @@ func (s *FederationSuite) SetUpSuite(c *check.C) {
 		tc := boot.NewTestCluster(
 			filepath.Join(cwd, "..", ".."),
 			id, cfg, "127.0.0."+id[3:], c.Log)
+		tc.Super.NoWorkbench1 = true
+		tc.Start()
 		s.testClusters[id] = tc
-		s.testClusters[id].Start()
 	}
 	for _, tc := range s.testClusters {
 		ok := tc.WaitReady()

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list