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 <anton@ju60.de>
This commit is contained in:
6543 2021-11-23 05:06:46 +01:00 committed by GitHub
parent 34ff30010e
commit f454371e56
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -25,6 +25,7 @@ import (
) )
// APPEND NEW MIGRATIONS // APPEND NEW MIGRATIONS
// they are executed in order and if one fail woodpecker try to rollback and quit
var migrationTasks = []task{ var migrationTasks = []task{
legacy2Xorm, legacy2Xorm,
alterTableReposDropFallback, alterTableReposDropFallback,
@ -92,17 +93,24 @@ func Migrate(e *xorm.Engine) error {
} }
func runTasks(sess *xorm.Session, tasks []task) 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 { for _, task := range tasks {
log.Trace().Msgf("start migration task '%s'", task.name) if migCache[task.name] {
exist, err := sess.Exist(&migrations{task.name}) log.Trace().Msgf("migration task '%s' already applied", task.name)
if err != nil {
return err
}
if exist {
log.Trace().Msgf("migration task '%s' exist", task.name)
continue continue
} }
log.Trace().Msgf("start migration task '%s'", task.name)
if task.fn != nil { if task.fn != nil {
if err := task.fn(sess); err != nil { if err := task.fn(sess); err != nil {
return err return err
@ -115,6 +123,7 @@ func runTasks(sess *xorm.Session, tasks []task) error {
if _, err := sess.Insert(&migrations{task.name}); err != nil { if _, err := sess.Insert(&migrations{task.name}); err != nil {
return err return err
} }
migCache[task.name] = true
} }
return nil return nil
} }