Obtain lock before auto-migrating table

This commit is contained in:
Lasse Hyldahl Jensen 2023-11-09 16:15:04 +01:00
parent 34440dafd8
commit 4d6c09b83e
2 changed files with 20 additions and 0 deletions

View File

@ -108,4 +108,8 @@ type Migrator interface {
HasIndex(dst interface{}, name string) bool
RenameIndex(dst interface{}, oldName, newName string) error
GetIndexes(dst interface{}) ([]Index, error)
// Locking
ObtainLock() error
ReleaseLock() error
}

View File

@ -119,6 +119,12 @@ func (m Migrator) AutoMigrate(values ...interface{}) error {
queryTx.DryRun = false
execTx = m.DB.Session(&gorm.Session{Logger: &printSQLLogger{Interface: m.DB.Logger}})
}
if err := execTx.Migrator().ObtainLock(); err != nil {
return err
}
defer execTx.Migrator().ReleaseLock()
if !queryTx.Migrator().HasTable(value) {
if err := execTx.Migrator().CreateTable(value); err != nil {
return err
@ -985,3 +991,13 @@ func (m Migrator) GetTypeAliases(databaseTypeName string) []string {
func (m Migrator) TableType(dst interface{}) (gorm.TableType, error) {
return nil, errors.New("not support")
}
// ObtainLock obtains a global migration lock
func (m Migrator) ObtainLock() error {
return nil
}
// ReleaseLock releases the global migration lock
func (m Migrator) ReleaseLock() error {
return nil
}