From 219e848e734144a1794ceb4995339ff21fb37c83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20L=C3=B3pez=20de=20la=20Franca=20Beltran?= <5459617+joanlopez@users.noreply.github.com> Date: Sat, 4 Jun 2022 01:59:49 +0200 Subject: [PATCH] SQLStore: Prevent migration_id duplicates (#47774) * SQLStore: Prevent migration_id duplicates * Migrations: Remove non-executed migration (duplicated id) Co-authored-by: Leonard Gram --- .../sqlstore/migrations/datasource_mig.go | 20 ------------------- pkg/services/sqlstore/migrator/migrator.go | 19 ++++++++++++------ 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/pkg/services/sqlstore/migrations/datasource_mig.go b/pkg/services/sqlstore/migrations/datasource_mig.go index 124f5cd8dd4..b08a6d3f052 100644 --- a/pkg/services/sqlstore/migrations/datasource_mig.go +++ b/pkg/services/sqlstore/migrations/datasource_mig.go @@ -75,26 +75,6 @@ func addDataSourceMigration(mg *Migrator) { // add v2 indíces 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")) // add column to activate withCredentials option diff --git a/pkg/services/sqlstore/migrator/migrator.go b/pkg/services/sqlstore/migrator/migrator.go index 71b7e90c761..15fe9347e77 100644 --- a/pkg/services/sqlstore/migrator/migrator.go +++ b/pkg/services/sqlstore/migrator/migrator.go @@ -21,12 +21,13 @@ var ( ) type Migrator struct { - DBEngine *xorm.Engine - Dialect Dialect - migrations []Migration - Logger log.Logger - Cfg *setting.Cfg - isLocked atomic.Bool + DBEngine *xorm.Engine + Dialect Dialect + migrations []Migration + migrationIds map[string]struct{} + Logger log.Logger + Cfg *setting.Cfg + isLocked atomic.Bool } type MigrationLog struct { @@ -43,6 +44,7 @@ func NewMigrator(engine *xorm.Engine, cfg *setting.Cfg) *Migrator { mg.DBEngine = engine mg.Logger = log.New("migrator") mg.migrations = make([]Migration, 0) + mg.migrationIds = make(map[string]struct{}) mg.Dialect = NewDialect(mg.DBEngine) mg.Cfg = cfg return mg @@ -53,8 +55,13 @@ func (mg *Migrator) MigrationsCount() int { } 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) mg.migrations = append(mg.migrations, m) + mg.migrationIds[id] = struct{}{} } func (mg *Migrator) GetMigrationIDs(excludeNotLogged bool) []string {