From 51d26daffbf20f5576415a3d0d1d58f16a263502 Mon Sep 17 00:00:00 2001 From: Mike Greenberg Date: Tue, 18 Dec 2018 12:46:41 -0500 Subject: [PATCH 1/2] Improve schema migration logs --- repo/migration.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/repo/migration.go b/repo/migration.go index 93550731b9..0c483fbe38 100644 --- a/repo/migration.go +++ b/repo/migration.go @@ -42,6 +42,7 @@ func MigrateUp(repoPath, dbPassword string, testnet bool) error { if err != nil && !os.IsNotExist(err) { return err } else if err != nil && os.IsNotExist(err) { + log.Noticef("missing repo version file, migrating from 0") version = []byte("0") } v, err := strconv.Atoi(strings.Trim(string(version), "\n")) @@ -50,7 +51,7 @@ func MigrateUp(repoPath, dbPassword string, testnet bool) error { } x := v for _, m := range Migrations[v:] { - log.Noticef("Migrating repo to version %d\n", x+1) + log.Noticef("running migration %03d changing schema to version %d...\n", x, x+1) err := m.Up(repoPath, dbPassword, testnet) if err != nil { log.Error(err) From 36a95f6f403af51b5da19fadeca67695fb0ec815 Mon Sep 17 00:00:00 2001 From: Mike Greenberg Date: Tue, 18 Dec 2018 13:02:15 -0500 Subject: [PATCH 2/2] [#993] Better migration out-of-bounds handling --- repo/migration.go | 51 ++++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/repo/migration.go b/repo/migration.go index 0c483fbe38..f2adfd69c4 100644 --- a/repo/migration.go +++ b/repo/migration.go @@ -1,6 +1,7 @@ package repo import ( + "errors" "io/ioutil" "os" "path" @@ -15,25 +16,29 @@ type Migration interface { Down(repoPath string, dbPassword string, testnet bool) error } -var Migrations = []Migration{ - migrations.Migration000{}, - migrations.Migration001{}, - migrations.Migration002{}, - migrations.Migration003{}, - migrations.Migration004{}, - migrations.Migration005{}, - migrations.Migration006{}, - migrations.Migration007{}, - migrations.Migration008{}, - migrations.Migration009{}, - migrations.Migration010{}, - migrations.Migration011{}, - migrations.Migration012{}, - migrations.Migration013{}, - migrations.Migration014{}, - migrations.Migration015{}, - migrations.Migration016{}, -} +var ( + ErrUnknownSchema = errors.New("unable to migrate unknown schema") + + Migrations = []Migration{ + migrations.Migration000{}, + migrations.Migration001{}, + migrations.Migration002{}, + migrations.Migration003{}, + migrations.Migration004{}, + migrations.Migration005{}, + migrations.Migration006{}, + migrations.Migration007{}, + migrations.Migration008{}, + migrations.Migration009{}, + migrations.Migration010{}, + migrations.Migration011{}, + migrations.Migration012{}, + migrations.Migration013{}, + migrations.Migration014{}, + migrations.Migration015{}, + migrations.Migration016{}, + } +) // MigrateUp looks at the currently active migration version // and will migrate all the way up (applying all up migrations). @@ -49,9 +54,13 @@ func MigrateUp(repoPath, dbPassword string, testnet bool) error { if err != nil { return err } + if v > len(Migrations) { + log.Errorf("binary can migrate schemas up to version %03d but this schema is already at %03d", len(Migrations)-1, v) + return ErrUnknownSchema + } x := v - for _, m := range Migrations[v:] { - log.Noticef("running migration %03d changing schema to version %d...\n", x, x+1) + for i, m := range Migrations[v:] { + log.Noticef("running migration %03d changing schema to version %03d...\n", i, x+1) err := m.Up(repoPath, dbPassword, testnet) if err != nil { log.Error(err)