From f454371e56e5322220ed78d79403ea27a35a9946 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Tue, 23 Nov 2021 05:06:46 +0100 Subject: [PATCH] store migrations: cache migrations and add note (#522) * Cache migrations instead of query each time * Add a note of migration execute order Co-authored-by: Anbraten --- server/store/datastore/migration/migration.go | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/server/store/datastore/migration/migration.go b/server/store/datastore/migration/migration.go index 051e3404e..c9187e15d 100644 --- a/server/store/datastore/migration/migration.go +++ b/server/store/datastore/migration/migration.go @@ -25,6 +25,7 @@ import ( ) // APPEND NEW MIGRATIONS +// they are executed in order and if one fail woodpecker try to rollback and quit var migrationTasks = []task{ legacy2Xorm, alterTableReposDropFallback, @@ -92,17 +93,24 @@ func Migrate(e *xorm.Engine) error { } func runTasks(sess *xorm.Session, tasks []task) error { + // cache migrations in db + migCache := make(map[string]bool) + var migList []*migrations + if err := sess.Find(&migList); err != nil { + return err + } + for i := range migList { + migCache[migList[i].Name] = true + } + for _, task := range tasks { - log.Trace().Msgf("start migration task '%s'", task.name) - exist, err := sess.Exist(&migrations{task.name}) - if err != nil { - return err - } - if exist { - log.Trace().Msgf("migration task '%s' exist", task.name) + if migCache[task.name] { + log.Trace().Msgf("migration task '%s' already applied", task.name) continue } + log.Trace().Msgf("start migration task '%s'", task.name) + if task.fn != nil { if err := task.fn(sess); err != nil { return err @@ -115,6 +123,7 @@ func runTasks(sess *xorm.Session, tasks []task) error { if _, err := sess.Insert(&migrations{task.name}); err != nil { return err } + migCache[task.name] = true } return nil }