19709: Warn, not eror, on unexpected files in db/migrate/. 19709-boot-db-migrate
authorTom Clegg <tom@curii.com>
Tue, 13 Dec 2022 19:24:33 +0000 (14:24 -0500)
committerTom Clegg <tom@curii.com>
Tue, 13 Dec 2022 19:24:33 +0000 (14:24 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

lib/boot/rails_db.go
lib/boot/rails_db_test.go

index ad9124d7dcb1ca54b7f130581ff768e175a946e9..16e150172de2fd372958d476ee27a10a67622129 100644 (file)
@@ -6,7 +6,6 @@ package boot
 
 import (
        "context"
-       "fmt"
        "io/fs"
        "os"
        "path/filepath"
@@ -14,6 +13,7 @@ import (
 
        "git.arvados.org/arvados.git/lib/controller/dblock"
        "git.arvados.org/arvados.git/lib/ctrlctx"
+       "github.com/sirupsen/logrus"
 )
 
 type railsDatabase struct{}
@@ -48,7 +48,7 @@ func (runner railsDatabase) Run(ctx context.Context, fail func(error), super *Su
        // there are no new migrations, that would add ~2s to startup
        // time / downtime during service restart.
 
-       todo, err := migrationList(appdir)
+       todo, err := migrationList(appdir, super.logger)
        if err != nil {
                return err
        }
@@ -97,7 +97,7 @@ func (runner railsDatabase) Run(ctx context.Context, fail func(error), super *Su
        return super.RunProgram(ctx, appdir, runOptions{env: railsEnv}, "bundle", "exec", "rake", "db:migrate")
 }
 
-func migrationList(dir string) (map[string]bool, error) {
+func migrationList(dir string, log logrus.FieldLogger) (map[string]bool, error) {
        todo := map[string]bool{}
 
        // list versions in db/migrate/{version}_{name}.rb
@@ -107,7 +107,8 @@ func migrationList(dir string) (map[string]bool, error) {
                }
                fnm := d.Name()
                if !strings.HasSuffix(fnm, ".rb") {
-                       return fmt.Errorf("unexpected file in db/migrate dir: %s", fnm)
+                       log.Warnf("unexpected file in db/migrate dir: %s", fnm)
+                       return nil
                }
                for i, c := range fnm {
                        if i > 0 && c == '_' {
@@ -118,7 +119,8 @@ func migrationList(dir string) (map[string]bool, error) {
                                // non-numeric character before the
                                // first '_' means this is not a
                                // migration
-                               return fmt.Errorf("unexpected file in db/migrate dir: %s", fnm)
+                               log.Warnf("unexpected file in db/migrate dir: %s", fnm)
+                               return nil
                        }
                }
                return nil
index ac78a3c9a5176885a603129f3f0dc14751c7e2b9..5711189e72d8587718bd7176b693a660d6db5943 100644 (file)
@@ -5,6 +5,8 @@
 package boot
 
 import (
+       "bytes"
+
        "git.arvados.org/arvados.git/lib/config"
        "git.arvados.org/arvados.git/sdk/go/arvadostest"
        "git.arvados.org/arvados.git/sdk/go/ctxlog"
@@ -17,9 +19,12 @@ var _ = check.Suite(&railsDBSuite{})
 
 // Check services/api/db/migrate/*.rb match schema_migrations
 func (s *railsDBSuite) TestMigrationList(c *check.C) {
-       todo, err := migrationList("../../services/api")
+       var logbuf bytes.Buffer
+       log := ctxlog.New(&logbuf, "text", "info")
+       todo, err := migrationList("../../services/api", log)
        c.Check(err, check.IsNil)
        c.Check(todo["20220804133317"], check.Equals, true)
+       c.Check(logbuf.String(), check.Equals, "")
 
        cfg, err := config.NewLoader(nil, ctxlog.TestLogger(c)).Load()
        c.Assert(err, check.IsNil)