mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-10-31 22:41:03 +00:00
- Use `forgejo` binary name for migration suggestions. - Resolves https://codeberg.org/forgejo/forgejo/issues/869#issuecomment-944501 (cherry picked from commit418a0bed8f) (cherry picked from commit734579ce9b) (cherry picked from commit34bce5be19) (cherry picked from commit9c788a6ec0) (cherry picked from commit6cabe32311) (cherry picked from commiteba83a2440) (cherry picked from commit271c4586b2) (cherry picked from commit60883a4d68) (cherry picked from commitec1f866ccb) (cherry picked from commit3689fbe53c) (cherry picked from commit8019b115b6) (cherry picked from commit0d565d655b) (cherry picked from commitb3f72a1e11) (cherry picked from commit1bd8eab96d) (cherry picked from commit1b0e01e407) (cherry picked from commitd2551dc9b7) (cherry picked from commitcbaead8c38) (cherry picked from commitcdab2d7a54) (cherry picked from commitc168d9596e) (cherry picked from commit8f2bddd1d0) (cherry picked from commite3e948e7da) (cherry picked from commit4873350641) (cherry picked from commit218eb62bb6)
60 lines
2.1 KiB
Go
60 lines
2.1 KiB
Go
// 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.`+
|
|
`You can set "database.AUTO_MIGRATION" to true or migrate manually by running "forgejo [--config /path/to/app.ini] migrate"`, current, expected)
|
|
}
|
|
return nil
|
|
}
|