code.gitea.io/gitea@v1.21.7/routers/common/db.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package common 5 6 import ( 7 "context" 8 "fmt" 9 "time" 10 11 "code.gitea.io/gitea/models/db" 12 "code.gitea.io/gitea/models/migrations" 13 system_model "code.gitea.io/gitea/models/system" 14 "code.gitea.io/gitea/modules/log" 15 "code.gitea.io/gitea/modules/setting" 16 "code.gitea.io/gitea/modules/setting/config" 17 18 "xorm.io/xorm" 19 ) 20 21 // InitDBEngine In case of problems connecting to DB, retry connection. Eg, PGSQL in Docker Container on Synology 22 func InitDBEngine(ctx context.Context) (err error) { 23 log.Info("Beginning ORM engine initialization.") 24 for i := 0; i < setting.Database.DBConnectRetries; i++ { 25 select { 26 case <-ctx.Done(): 27 return fmt.Errorf("Aborted due to shutdown:\nin retry ORM engine initialization") 28 default: 29 } 30 log.Info("ORM engine initialization attempt #%d/%d...", i+1, setting.Database.DBConnectRetries) 31 if err = db.InitEngineWithMigration(ctx, migrateWithSetting); err == nil { 32 break 33 } else if i == setting.Database.DBConnectRetries-1 { 34 return err 35 } 36 log.Error("ORM engine initialization attempt #%d/%d failed. Error: %v", i+1, setting.Database.DBConnectRetries, err) 37 log.Info("Backing off for %d seconds", int64(setting.Database.DBConnectBackoff/time.Second)) 38 time.Sleep(setting.Database.DBConnectBackoff) 39 } 40 config.SetDynGetter(system_model.NewDatabaseDynKeyGetter()) 41 return nil 42 } 43 44 func migrateWithSetting(x *xorm.Engine) error { 45 if setting.Database.AutoMigration { 46 return migrations.Migrate(x) 47 } 48 49 if current, err := migrations.GetCurrentDBVersion(x); err != nil { 50 return err 51 } else if current < 0 { 52 // execute migrations when the database isn't initialized even if AutoMigration is false 53 return migrations.Migrate(x) 54 } else if expected := migrations.ExpectedVersion(); current != expected { 55 log.Fatal(`"database.AUTO_MIGRATION" is disabled, but current database version %d is not equal to the expected version %d.`+ 56 `You can set "database.AUTO_MIGRATION" to true or migrate manually by running "gitea [--config /path/to/app.ini] migrate"`, current, expected) 57 } 58 return nil 59 }