Gitea will migrate the database model version automatically, but it should be able to be disabled and keep Gitea shutdown if the version is not matched.tags/v1.19.0-rc0
@@ -403,6 +403,9 @@ LOG_SQL = false ; if unset defaults to true | |||
;; | |||
;; Database maximum number of open connections, default is 0 meaning no maximum | |||
;MAX_OPEN_CONNS = 0 | |||
;; | |||
;; Whether execute database models migrations automatically | |||
;AUTO_MIGRATION = true | |||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
@@ -444,6 +444,7 @@ The following configuration set `Content-Type: application/vnd.android.package-a | |||
- `MAX_OPEN_CONNS` **0**: Database maximum open connections - default is 0, meaning there is no limit. | |||
- `MAX_IDLE_CONNS` **2**: Max idle database connections on connection pool, default is 2 - this will be capped to `MAX_OPEN_CONNS`. | |||
- `CONN_MAX_LIFETIME` **0 or 3s**: Sets the maximum amount of time a DB connection may be reused - default is 0, meaning there is no limit (except on MySQL where it is 3s - see #6804 & #7071). | |||
- `AUTO_MIGRATION` **true**: Whether execute database models migrations automatically. | |||
Please see #8540 & #8273 for further discussion of the appropriate values for `MAX_OPEN_CONNS`, `MAX_IDLE_CONNS` & `CONN_MAX_LIFETIME` and their | |||
relation to port exhaustion. |
@@ -12,6 +12,7 @@ import ( | |||
) | |||
func checkDBVersion(ctx context.Context, logger log.Logger, autofix bool) error { | |||
logger.Info("Expected database version: %d", migrations.ExpectedVersion()) | |||
if err := db.InitEngineWithMigration(ctx, migrations.EnsureUpToDate); err != nil { | |||
if !autofix { | |||
logger.Critical("Error: %v during ensure up to date", err) |
@@ -49,6 +49,7 @@ var ( | |||
MaxOpenConns int | |||
ConnMaxLifetime time.Duration | |||
IterateBufferSize int | |||
AutoMigration bool | |||
}{ | |||
Timeout: 500, | |||
IterateBufferSize: 50, | |||
@@ -105,6 +106,7 @@ func InitDBConfig() { | |||
Database.LogSQL = sec.Key("LOG_SQL").MustBool(true) | |||
Database.DBConnectRetries = sec.Key("DB_RETRIES").MustInt(10) | |||
Database.DBConnectBackoff = sec.Key("DB_RETRY_BACKOFF").MustDuration(3 * time.Second) | |||
Database.AutoMigration = sec.Key("AUTO_MIGRATION").MustBool(true) | |||
} | |||
// DBConnStr returns database connection string |
@@ -12,6 +12,8 @@ import ( | |||
"code.gitea.io/gitea/models/migrations" | |||
"code.gitea.io/gitea/modules/log" | |||
"code.gitea.io/gitea/modules/setting" | |||
"xorm.io/xorm" | |||
) | |||
// InitDBEngine In case of problems connecting to DB, retry connection. Eg, PGSQL in Docker Container on Synology | |||
@@ -24,7 +26,7 @@ func InitDBEngine(ctx context.Context) (err error) { | |||
default: | |||
} | |||
log.Info("ORM engine initialization attempt #%d/%d...", i+1, setting.Database.DBConnectRetries) | |||
if err = db.InitEngineWithMigration(ctx, migrations.Migrate); err == nil { | |||
if err = db.InitEngineWithMigration(ctx, migrateWithSetting); err == nil { | |||
break | |||
} else if i == setting.Database.DBConnectRetries-1 { | |||
return err | |||
@@ -36,3 +38,20 @@ func InitDBEngine(ctx context.Context) (err error) { | |||
db.HasEngine = true | |||
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 "gitea [--config /path/to/app.ini] migrate"`, current, expected) | |||
} | |||
return nil | |||
} |