From c12d252795d1182555792bb3ffe58f06475536b4 Mon Sep 17 00:00:00 2001 From: sentriz Date: Sun, 3 May 2020 21:44:06 +0100 Subject: [PATCH] run each migration in its own transaction --- server/db/db.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/server/db/db.go b/server/db/db.go index c20f072..634f30c 100644 --- a/server/db/db.go +++ b/server/db/db.go @@ -11,12 +11,13 @@ import ( "gopkg.in/gormigrate.v1" ) -func addMigrationLog(migrs ...gormigrate.Migration) []*gormigrate.Migration { +// wrapMigrations wraps a list of migrations to add logging and transactions +func wrapMigrations(migrs ...gormigrate.Migration) []*gormigrate.Migration { log := func(i int, mig gormigrate.MigrateFunc, name string) gormigrate.MigrateFunc { - return func(tx *gorm.DB) error { + return func(db *gorm.DB) error { // print that we're on the ith out of n migrations defer log.Printf("migration (%d/%d) '%s' finished", i+1, len(migrs), name) - return mig(tx) + return db.Transaction(mig) } } ret := make([]*gormigrate.Migration, 0, len(migrs)) @@ -61,7 +62,13 @@ func New(path string) (*DB, error) { } db.SetLogger(log.New(os.Stdout, "gorm ", 0)) db.DB().SetMaxOpenConns(dbMaxOpenConns) - migr := gormigrate.New(db, gormigrate.DefaultOptions, addMigrationLog( + migrOptions := &gormigrate.Options{ + TableName: "migrations", + IDColumnName: "id", + IDColumnSize: 255, + UseTransaction: false, + } + migr := gormigrate.New(db, migrOptions, wrapMigrations( migrationInitSchema, migrationCreateInitUser, migrationMergePlaylist,