13647: Don't do API calls while loading controller config.
authorTom Clegg <tclegg@veritasgenetics.com>
Thu, 19 Sep 2019 17:45:49 +0000 (13:45 -0400)
committerTom Clegg <tclegg@veritasgenetics.com>
Thu, 19 Sep 2019 17:45:49 +0000 (13:45 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

lib/config/deprecated_keepstore.go
lib/config/load.go
lib/service/cmd.go

index 1969c4c3c31f6bba0b597fe775f14025bd41cb5d..04e937cc5cbfbe8f77f84a7877f3d4b4ccfaadd9 100644 (file)
@@ -585,6 +585,10 @@ func (ldr *Loader) checkPendingKeepstoreMigrations(cluster arvados.Cluster) erro
                ldr.Logger.Debug("Services.Controller.ExternalURL not configured -- skipping check for pending keepstore config migrations")
                return nil
        }
+       if ldr.SkipAPICalls {
+               ldr.Logger.Debug("(Loader).SkipAPICalls == true -- skipping check for pending keepstore config migrations")
+               return nil
+       }
        client, err := arvados.NewClientFromConfig(&cluster)
        if err != nil {
                return err
index db4bc9f597e443d5554b6f422df35aa31d673598..93c36f69ed47d0df580f62a137bc44997db718c1 100644 (file)
@@ -28,6 +28,7 @@ type Loader struct {
        Logger         logrus.FieldLogger
        SkipDeprecated bool // Don't load deprecated config keys
        SkipLegacy     bool // Don't load legacy config files
+       SkipAPICalls   bool // Don't do checks that call RailsAPI/controller
 
        Path                    string
        KeepstorePath           string
index c410e536847dde841d3f7f1ad553f07acb93cc55..d5619b87b307c53e781ea77b78ba943b20f78735 100644 (file)
@@ -79,6 +79,14 @@ func (c *command) RunCommand(prog string, args []string, stdin io.Reader, stdout
                return cmd.Version.RunCommand(prog, args, stdin, stdout, stderr)
        }
 
+       if strings.HasSuffix(prog, "controller") {
+               // Some config-loader checks try to make API calls via
+               // controller. Those can't be expected to work if this
+               // process _is_ the controller: we haven't started an
+               // http server yet.
+               loader.SkipAPICalls = true
+       }
+
        cfg, err := loader.Load()
        if err != nil {
                return 1