forgejo/routers/common/db.go

61 lines
2.1 KiB
Go
Raw Normal View History

// Copyright 2021 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package common
import (
"context"
"fmt"
"time"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/migrations"
system_model "code.gitea.io/gitea/models/system"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/setting/config"
"xorm.io/xorm"
)
// InitDBEngine In case of problems connecting to DB, retry connection. Eg, PGSQL in Docker Container on Synology
func InitDBEngine(ctx context.Context) (err error) {
log.Info("Beginning ORM engine initialization.")
for i := 0; i < setting.Database.DBConnectRetries; i++ {
select {
case <-ctx.Done():
return fmt.Errorf("Aborted due to shutdown:\nin retry ORM engine initialization")
default:
}
log.Info("ORM engine initialization attempt #%d/%d...", i+1, setting.Database.DBConnectRetries)
if err = db.InitEngineWithMigration(ctx, migrateWithSetting); err == nil {
break
} else if i == setting.Database.DBConnectRetries-1 {
return err
}
log.Error("ORM engine initialization attempt #%d/%d failed. Error: %v", i+1, setting.Database.DBConnectRetries, err)
log.Info("Backing off for %d seconds", int64(setting.Database.DBConnectBackoff/time.Second))
time.Sleep(setting.Database.DBConnectBackoff)
}
db.HasEngine = true
config.SetDynGetter(system_model.NewDatabaseDynKeyGetter())
return nil
}
func migrateWithSetting(x *xorm.Engine) error {
if setting.Database.AutoMigration {
return migrations.Migrate(x)
}
if current, err := migrations.GetCurrentDBVersion(x); err != nil {
return err
} else if current < 0 {
// execute migrations when the database isn't initialized even if AutoMigration is false
return migrations.Migrate(x)
} else if expected := migrations.ExpectedVersion(); current != expected {
log.Fatal(`"database.AUTO_MIGRATION" is disabled, but current database version %d is not equal to the expected version %d.`+
[BRANDING] Use `forgejo` binary name - Use `forgejo` binary name for migration suggestions. - Resolves https://codeberg.org/forgejo/forgejo/issues/869#issuecomment-944501 (cherry picked from commit 418a0bed8f831b72b206ca415d99c99824bec839) (cherry picked from commit 734579ce9b0f66b61b4a08f605695af9db1d4f4e) (cherry picked from commit 34bce5be193505cfc58a115dcd42a5d5912cb250) (cherry picked from commit 9c788a6ec03ab413fc346386a6db846d1ca3b3e2) (cherry picked from commit 6cabe323115d3e56f0eab1fe1d9eb384e32486d5) (cherry picked from commit eba83a24408d40a922aee168ab7518fda0d488bb) (cherry picked from commit 271c4586b2f2d88c8abcb3a514e02d579ee0fdb6) (cherry picked from commit 60883a4d68e0d15faec91df3a88644f5a4761ac5) (cherry picked from commit ec1f866ccb22fba03ebdabb2a09fb149c9efcd4a) (cherry picked from commit 3689fbe53c426e7bd728ba35c0c744b952c93298) (cherry picked from commit 8019b115b640d744233b9652efc8895294ad4103) (cherry picked from commit 0d565d655b282382f910e6a6b74808852ebc6c0f) (cherry picked from commit b3f72a1e118da558bfc72cc2ba42adb38f7b2e4b) (cherry picked from commit 1bd8eab96db30c4690d7f39c9585d9edcbb80032) (cherry picked from commit 1b0e01e40713f0e5e41318857c96e18d8156ae96) (cherry picked from commit d2551dc9b75b002c35ffcd2d9d49a53e79f29341) (cherry picked from commit cbaead8c387f8d9f25f3e914d26fe80ced5a5e17) (cherry picked from commit cdab2d7a542ccea3e7d983f8993a14549e8f215e) (cherry picked from commit c168d9596eb3ce4f2138371aa98954923b4659da) (cherry picked from commit 8f2bddd1d0aa2b5daf73f9493cf017a887a84f37) (cherry picked from commit e3e948e7dacb1548d74968efb6434d46fb42074d) (cherry picked from commit 487335064164d9464dcdf6bd948f7772aeb5282c) (cherry picked from commit 218eb62bb6f8f595c01b8f7a1ec91b74a84bae51)
2023-06-18 18:34:26 +00:00
`You can set "database.AUTO_MIGRATION" to true or migrate manually by running "forgejo [--config /path/to/app.ini] migrate"`, current, expected)
}
return nil
}