mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-10-25 11:33:11 +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 commit7de165e11b) (cherry picked from commita3af896878) (cherry picked from commit886a9019c6) (cherry picked from commit6990c95c99) (cherry picked from commit7a9fc37939) (cherry picked from commit9fd194fdcf) (cherry picked from commitdf976e858b) (cherry picked from commitdb8dd753ed) (cherry picked from commit216648a104) (cherry picked from commit80fa4d46bd) (cherry picked from commit7a2998a46a) (cherry picked from commit40fa85df8e) (cherry picked from commite671021168) (cherry picked from commitcb4b7e2b5c) (cherry picked from commit241a2b5242)
59 lines
2.1 KiB
Go
59 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)
|
|
}
|
|
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
|
|
}
|