forgejo/routers/common/db.go

60 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)
}
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.ExpectedDBVersion(); 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 7de165e11bd878b80908b3957e3435bae87b6834) (cherry picked from commit a3af896878c818bf57affa2286d5e26c1e840e66) (cherry picked from commit 886a9019c6ccbe2165b2c1aba8f0ad457b9176e8) (cherry picked from commit 6990c95c991f4081e5bd047a1b010ad016f16054) (cherry picked from commit 7a9fc379399eb42e0d34bb9ee9d937a0f4bbdbf0) (cherry picked from commit 9fd194fdcf8ce1755e2cd069fbd02f125f9f21e9) (cherry picked from commit df976e858bd80f2207fbb0fde91f975633a0b0f6) (cherry picked from commit db8dd753edbd9bb972eb8d56ce96fb8caee14f63) (cherry picked from commit 216648a1041a6fd9603bcadaeadd6706b516df62) (cherry picked from commit 80fa4d46bd40dc041e35733ee7d1bcaa81d497e6) (cherry picked from commit 7a2998a46a8fbc1953285c189e0504caedc509c0) (cherry picked from commit 40fa85df8e9eca51e4ea85dfdbc1088bda6ec3b2) (cherry picked from commit e671021168e38ea249f1b169374b4c4a7318250d) (cherry picked from commit cb4b7e2b5c3840a07cf2e890ede976c021774735) (cherry picked from commit 241a2b5242f7dbfdf1963164c8b2b279fcd5ae51)
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
}