* SQLStore: Prevent concurrent migrations (#44101) * SQLStore: Prevent concurrent migrations * Hide behind a feature toggle * Configurable locking attempt timeout * Update docs/sources/administration/configuration.md Co-authored-by: Igor Suleymanov <radiohead@users.noreply.github.com> Co-authored-by: achatterjee-grafana <70489351+achatterjee-grafana@users.noreply.github.com> (cherry picked from commitd718ee1918) * Resolve dependency cycle (#45427) (cherry picked from commit6a38ce2307)
This commit is contained in:
committed by
GitHub
parent
e43e5c3c42
commit
3d2fbcba2d
@@ -56,8 +56,7 @@ type SQLStore struct {
|
||||
tracer tracing.Tracer
|
||||
}
|
||||
|
||||
func ProvideService(cfg *setting.Cfg, cacheService *localcache.CacheService, bus bus.Bus, migrations registry.DatabaseMigrator, tracer tracing.Tracer,
|
||||
) (*SQLStore, error) {
|
||||
func ProvideService(cfg *setting.Cfg, cacheService *localcache.CacheService, bus bus.Bus, migrations registry.DatabaseMigrator, tracer tracing.Tracer) (*SQLStore, error) {
|
||||
// This change will make xorm use an empty default schema for postgres and
|
||||
// by that mimic the functionality of how it was functioning before
|
||||
// xorm's changes above.
|
||||
@@ -67,7 +66,7 @@ func ProvideService(cfg *setting.Cfg, cacheService *localcache.CacheService, bus
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := s.Migrate(); err != nil {
|
||||
if err := s.Migrate(cfg.IsFeatureToggleEnabled(featuremgmt.FlagMigrationLocking)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -150,7 +149,7 @@ func newSQLStore(cfg *setting.Cfg, cacheService *localcache.CacheService, bus bu
|
||||
// Migrate performs database migrations.
|
||||
// Has to be done in a second phase (after initialization), since other services can register migrations during
|
||||
// the initialization phase.
|
||||
func (ss *SQLStore) Migrate() error {
|
||||
func (ss *SQLStore) Migrate(isDatabaseLockingEnabled bool) error {
|
||||
if ss.dbCfg.SkipMigrations {
|
||||
return nil
|
||||
}
|
||||
@@ -158,7 +157,7 @@ func (ss *SQLStore) Migrate() error {
|
||||
migrator := migrator.NewMigrator(ss.engine, ss.Cfg)
|
||||
ss.migrations.AddMigration(migrator)
|
||||
|
||||
return migrator.Start()
|
||||
return migrator.Start(isDatabaseLockingEnabled, ss.dbCfg.MigrationLockAttemptTimeout)
|
||||
}
|
||||
|
||||
// Sync syncs changes to the database.
|
||||
@@ -440,6 +439,7 @@ func (ss *SQLStore) readConfig() error {
|
||||
|
||||
ss.dbCfg.CacheMode = sec.Key("cache_mode").MustString("private")
|
||||
ss.dbCfg.SkipMigrations = sec.Key("skip_migrations").MustBool()
|
||||
ss.dbCfg.MigrationLockAttemptTimeout = sec.Key("locking_attempt_timeout_sec").MustInt()
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -547,7 +547,7 @@ func initTestDB(migration registry.DatabaseMigrator, opts ...InitTestDBOpt) (*SQ
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := testSQLStore.Migrate(); err != nil {
|
||||
if err := testSQLStore.Migrate(false); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -607,23 +607,24 @@ func IsTestDBMSSQL() bool {
|
||||
}
|
||||
|
||||
type DatabaseConfig struct {
|
||||
Type string
|
||||
Host string
|
||||
Name string
|
||||
User string
|
||||
Pwd string
|
||||
Path string
|
||||
SslMode string
|
||||
CaCertPath string
|
||||
ClientKeyPath string
|
||||
ClientCertPath string
|
||||
ServerCertName string
|
||||
ConnectionString string
|
||||
IsolationLevel string
|
||||
MaxOpenConn int
|
||||
MaxIdleConn int
|
||||
ConnMaxLifetime int
|
||||
CacheMode string
|
||||
UrlQueryParams map[string][]string
|
||||
SkipMigrations bool
|
||||
Type string
|
||||
Host string
|
||||
Name string
|
||||
User string
|
||||
Pwd string
|
||||
Path string
|
||||
SslMode string
|
||||
CaCertPath string
|
||||
ClientKeyPath string
|
||||
ClientCertPath string
|
||||
ServerCertName string
|
||||
ConnectionString string
|
||||
IsolationLevel string
|
||||
MaxOpenConn int
|
||||
MaxIdleConn int
|
||||
ConnMaxLifetime int
|
||||
CacheMode string
|
||||
UrlQueryParams map[string][]string
|
||||
SkipMigrations bool
|
||||
MigrationLockAttemptTimeout int
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user