SQLStore: Prevent migration_id duplicates (#47774)

* SQLStore: Prevent migration_id duplicates

* Migrations: Remove non-executed migration (duplicated id)

Co-authored-by: Leonard Gram <leo@xlson.com>
This commit is contained in:
Joan López de la Franca Beltran 2022-06-04 01:59:49 +02:00 committed by GitHub
parent 12ba2d6b8b
commit 219e848e73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 26 deletions

View File

@ -75,26 +75,6 @@ func addDataSourceMigration(mg *Migrator) {
// add v2 indíces // add v2 indíces
addTableIndicesMigrations(mg, "v2", tableV2) addTableIndicesMigrations(mg, "v2", tableV2)
//------- copy data from v1 to v2 -------------------
mg.AddMigration("copy data_source v1 to v2", NewCopyTableDataMigration("data_source", "data_source_v1", map[string]string{
"id": "id",
"org_id": "account_id",
"version": "version",
"type": "type",
"name": "name",
"access": "access",
"url": "url",
"user": "user",
"password": "password",
"database": "database",
"basic_auth": "basic_auth",
"basic_auth_user": "basic_auth_user",
"basic_auth_password": "basic_auth_password",
"is_default": "is_default",
"created": "created",
"updated": "updated",
}))
mg.AddMigration("Drop old table data_source_v1 #2", NewDropTableMigration("data_source_v1")) mg.AddMigration("Drop old table data_source_v1 #2", NewDropTableMigration("data_source_v1"))
// add column to activate withCredentials option // add column to activate withCredentials option

View File

@ -21,12 +21,13 @@ var (
) )
type Migrator struct { type Migrator struct {
DBEngine *xorm.Engine DBEngine *xorm.Engine
Dialect Dialect Dialect Dialect
migrations []Migration migrations []Migration
Logger log.Logger migrationIds map[string]struct{}
Cfg *setting.Cfg Logger log.Logger
isLocked atomic.Bool Cfg *setting.Cfg
isLocked atomic.Bool
} }
type MigrationLog struct { type MigrationLog struct {
@ -43,6 +44,7 @@ func NewMigrator(engine *xorm.Engine, cfg *setting.Cfg) *Migrator {
mg.DBEngine = engine mg.DBEngine = engine
mg.Logger = log.New("migrator") mg.Logger = log.New("migrator")
mg.migrations = make([]Migration, 0) mg.migrations = make([]Migration, 0)
mg.migrationIds = make(map[string]struct{})
mg.Dialect = NewDialect(mg.DBEngine) mg.Dialect = NewDialect(mg.DBEngine)
mg.Cfg = cfg mg.Cfg = cfg
return mg return mg
@ -53,8 +55,13 @@ func (mg *Migrator) MigrationsCount() int {
} }
func (mg *Migrator) AddMigration(id string, m Migration) { func (mg *Migrator) AddMigration(id string, m Migration) {
if _, ok := mg.migrationIds[id]; ok {
panic(fmt.Sprintf("migration id conflict: %s", id))
}
m.SetId(id) m.SetId(id)
mg.migrations = append(mg.migrations, m) mg.migrations = append(mg.migrations, m)
mg.migrationIds[id] = struct{}{}
} }
func (mg *Migrator) GetMigrationIDs(excludeNotLogged bool) []string { func (mg *Migrator) GetMigrationIDs(excludeNotLogged bool) []string {