Kaynağa Gözat

Merge branch 'nafees/pe-features' into preview-env-v2-fe

Mohammed Nafees 3 yıl önce
ebeveyn
işleme
4f5f2dd5b8
1 değiştirilmiş dosya ile 30 ekleme ve 3 silme
  1. 30 3
      cmd/migrate/main.go

+ 30 - 3
cmd/migrate/main.go

@@ -52,12 +52,33 @@ func main() {
 		return
 	}
 
+	tx := db.Begin()
+
+	switch tx.Dialector.Name() {
+	case "sqlite":
+		if err := tx.Raw("PRAGMA schema.locking_mode = EXCLUSIVE").Error; err != nil {
+			tx.Rollback()
+
+			logger.Fatal().Err(err).Msg("error acquiring lock on db_migrations")
+			return
+		}
+	case "postgres":
+		if err := tx.Raw("LOCK TABLE db_migrations IN SHARE ROW EXCLUSIVE MODE").Error; err != nil {
+			tx.Rollback()
+
+			logger.Fatal().Err(err).Msg("error acquiring lock on db_migrations")
+			return
+		}
+	}
+
 	dbMigration := &models.DbMigration{}
 
-	if err := db.Model(&models.DbMigration{}).First(dbMigration).Error; err != nil {
+	if err := tx.Model(&models.DbMigration{}).First(dbMigration).Error; err != nil {
 		if errors.Is(err, pgorm.ErrRecordNotFound) {
 			dbMigration.Version = 0
 		} else {
+			tx.Rollback()
+
 			logger.Fatal().Err(err).Msg("failed to check for db migration version")
 			return
 		}
@@ -68,9 +89,11 @@ func main() {
 	if dbMigration.Version < latestMigrationVersion {
 		for ver, fn := range startup_migrations.StartupMigrations {
 			if ver > dbMigration.Version {
-				err := fn(db, logger)
+				err := fn(tx, logger)
 
 				if err != nil {
+					tx.Rollback()
+
 					logger.Fatal().Err(err).Msg("failed to run startup migration script")
 					return
 				}
@@ -79,12 +102,16 @@ func main() {
 
 		dbMigration.Version = latestMigrationVersion
 
-		if err := db.Save(dbMigration).Error; err != nil {
+		if err := tx.Save(dbMigration).Error; err != nil {
+			tx.Rollback()
+
 			logger.Fatal().Err(err).Msg("failed to update migration version to latest")
 			return
 		}
 	}
 
+	tx.Commit()
+
 	if shouldRotate, oldKeyStr, newKeyStr := shouldKeyRotate(); shouldRotate {
 		oldKey := [32]byte{}
 		newKey := [32]byte{}