
Resolves #7207 Add new configuration to make XORM work with a main and replicas database instances. The follow configuration parameters were added: - `HOST_PRIMARY` - `HOST_REPLICAS` - `LOAD_BALANCE_POLICY`. Options: - `"WeightRandom"` -> `xorm.WeightRandomPolicy` - `"WeightRoundRobin` -> `WeightRoundRobinPolicy` - `"LeastCon"` -> `LeastConnPolicy` - `"RoundRobin"` -> `xorm.RoundRobinPolicy()` - default: `xorm.RandomPolicy()` - `LOAD_BALANCE_WEIGHTS` Co-authored-by: pat-s <patrick.schratz@gmail.com@> Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7212 Reviewed-by: Gusted <gusted@noreply.codeberg.org> Co-authored-by: pat-s <patrick.schratz@gmail.com> Co-committed-by: pat-s <patrick.schratz@gmail.com>
48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
// Copyright 2020 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package doctor
|
|
|
|
import (
|
|
"context"
|
|
|
|
"forgejo.org/models/db"
|
|
"forgejo.org/models/migrations"
|
|
"forgejo.org/modules/log"
|
|
|
|
"xorm.io/xorm"
|
|
)
|
|
|
|
func checkDBVersion(ctx context.Context, logger log.Logger, autofix bool) error {
|
|
logger.Info("Expected database version: %d", migrations.ExpectedDBVersion())
|
|
if err := db.InitEngineWithMigration(ctx, func(eng db.Engine) error {
|
|
return migrations.EnsureUpToDate(eng.(*xorm.Engine))
|
|
}); err != nil {
|
|
if !autofix {
|
|
logger.Critical("Error: %v during ensure up to date", err)
|
|
return err
|
|
}
|
|
logger.Warn("Got Error: %v during ensure up to date", err)
|
|
logger.Warn("Attempting to migrate to the latest DB version to fix this.")
|
|
|
|
err = db.InitEngineWithMigration(ctx, func(eng db.Engine) error {
|
|
return migrations.Migrate(eng.(*xorm.Engine))
|
|
})
|
|
if err != nil {
|
|
logger.Critical("Error: %v during migration", err)
|
|
}
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func init() {
|
|
Register(&Check{
|
|
Title: "Check Database Version",
|
|
Name: "check-db-version",
|
|
IsDefault: true,
|
|
Run: checkDBVersion,
|
|
AbortIfFailed: false,
|
|
Priority: 2,
|
|
})
|
|
}
|