Skip to content

Commit f83db07

Browse files
lunnysapk
authored andcommitted
Move database settings from models to setting (#7806)
* move database settings from models to setting * update docs * fix checkout pr * fix tests * fix lint * remove unsupported tidb options * correct wrong variable name * remove tidb totally
1 parent 26af340 commit f83db07

35 files changed

+424
-377
lines changed

cmd/cmd.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func initDB() error {
3838

3939
func initDBDisableConsole(disableConsole bool) error {
4040
setting.NewContext()
41-
models.LoadConfigs()
41+
setting.InitDBConfig()
4242

4343
setting.NewXORMLogService(disableConsole)
4444
if err := models.SetEngine(); err != nil {

cmd/convert.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ func runConvert(ctx *cli.Context) error {
3131
log.Trace("AppWorkPath: %s", setting.AppWorkPath)
3232
log.Trace("Custom path: %s", setting.CustomPath)
3333
log.Trace("Log path: %s", setting.LogRootPath)
34-
models.LoadConfigs()
34+
setting.InitDBConfig()
3535

36-
if models.DbCfg.Type != "mysql" {
36+
if !setting.Database.UseMySQL {
3737
fmt.Println("This command can only be used with a MySQL database")
3838
return nil
3939
}

cmd/dump.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ It can be used for backup and capture Gitea server image to send to maintainer`,
5858
func runDump(ctx *cli.Context) error {
5959
setting.NewContext()
6060
setting.NewServices() // cannot access session settings otherwise
61-
models.LoadConfigs()
6261

6362
err := models.SetEngine()
6463
if err != nil {
@@ -104,8 +103,8 @@ func runDump(ctx *cli.Context) error {
104103
}
105104

106105
targetDBType := ctx.String("database")
107-
if len(targetDBType) > 0 && targetDBType != models.DbCfg.Type {
108-
log.Printf("Dumping database %s => %s...", models.DbCfg.Type, targetDBType)
106+
if len(targetDBType) > 0 && targetDBType != setting.Database.Type {
107+
log.Printf("Dumping database %s => %s...", setting.Database.Type, targetDBType)
109108
} else {
110109
log.Printf("Dumping database...")
111110
}

cmd/migrate.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func runMigrate(ctx *cli.Context) error {
3030
log.Trace("AppWorkPath: %s", setting.AppWorkPath)
3131
log.Trace("Custom path: %s", setting.CustomPath)
3232
log.Trace("Log path: %s", setting.LogRootPath)
33-
models.LoadConfigs()
33+
setting.InitDBConfig()
3434

3535
if err := models.NewEngine(migrations.Migrate); err != nil {
3636
log.Fatal("Failed to initialize ORM engine: %v", err)

contrib/pr/checkout.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -79,16 +79,16 @@ func runPR() {
7979
setting.CheckLFSVersion()
8080
//models.LoadConfigs()
8181
/*
82-
models.DbCfg.Type = "sqlite3"
83-
models.DbCfg.Path = ":memory:"
84-
models.DbCfg.Timeout = 500
82+
setting.Database.Type = "sqlite3"
83+
setting.Database.Path = ":memory:"
84+
setting.Database.Timeout = 500
8585
*/
8686
db := setting.Cfg.Section("database")
8787
db.NewKey("DB_TYPE", "sqlite3")
8888
db.NewKey("PATH", ":memory:")
89-
setting.LogSQL = true
90-
models.LoadConfigs()
89+
9190
routers.NewServices()
91+
setting.Database.LogSQL = true
9292
//x, err = xorm.NewEngine("sqlite3", "file::memory:?cache=shared")
9393

9494
var helper testfixtures.Helper = &testfixtures.SQLite{}

custom/conf/app.ini.sample

+4
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,10 @@ LOG_SQL = true
275275
DB_RETRIES = 10
276276
; Backoff time per DB retry (time.Duration)
277277
DB_RETRY_BACKOFF = 3s
278+
; Max idle database connections on connnection pool, default is 0
279+
MAX_IDLE_CONNS = 0
280+
; Database connection max life time, default is 3s
281+
CONN_MAX_LIFETIME = 3s
278282

279283
[indexer]
280284
; Issue indexer type, currently support: bleve or db, default is bleve

docs/content/doc/advanced/config-cheat-sheet.en-us.md

+2
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
166166
- `LOG_SQL`: **true**: Log the executed SQL.
167167
- `DB_RETRIES`: **10**: How many ORM init / DB connect attempts allowed.
168168
- `DB_RETRY_BACKOFF`: **3s**: time.Duration to wait before trying another ORM init / DB connect attempt, if failure occured.
169+
- `MAX_IDLE_CONNS` **0**: Max idle database connections on connnection pool, default is 0
170+
- `CONN_MAX_LIFETIME` **3s**: Database connection max lifetime
169171

170172
## Indexer (`indexer`)
171173

docs/content/doc/advanced/config-cheat-sheet.zh-cn.md

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ menu:
8282
- `CHARSET`: **utf8**: 仅当数据库为 MySQL 时有效, 可以为 "utf8" 或 "utf8mb4"。注意:如果使用 "utf8mb4",你的 MySQL InnoDB 版本必须在 5.6 以上。
8383
- `PATH`: Tidb 或者 SQLite3 数据文件存放路径。
8484
- `LOG_SQL`: **true**: 显示生成的SQL,默认为真。
85+
- `MAX_IDLE_CONNS` **0**: 最大空闲数据库连接
86+
- `CONN_MAX_LIFETIME` **3s**: 数据库连接最大存活时间
8587

8688
## Indexer (`indexer`)
8789

integrations/integration_test.go

+13-13
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,13 @@ func TestMain(m *testing.M) {
5959
routes.RegisterRoutes(mac)
6060

6161
var helper testfixtures.Helper
62-
if setting.UseMySQL {
62+
if setting.Database.UseMySQL {
6363
helper = &testfixtures.MySQL{}
64-
} else if setting.UsePostgreSQL {
64+
} else if setting.Database.UsePostgreSQL {
6565
helper = &testfixtures.PostgreSQL{}
66-
} else if setting.UseSQLite3 {
66+
} else if setting.Database.UseSQLite3 {
6767
helper = &testfixtures.SQLite{}
68-
} else if setting.UseMSSQL {
68+
} else if setting.Database.UseMSSQL {
6969
helper = &testfixtures.SQLServer{}
7070
} else {
7171
fmt.Println("Unsupported RDBMS for integration tests")
@@ -121,27 +121,27 @@ func initIntegrationTest() {
121121
setting.SetCustomPathAndConf("", "", "")
122122
setting.NewContext()
123123
setting.CheckLFSVersion()
124-
models.LoadConfigs()
124+
setting.InitDBConfig()
125125

126126
switch {
127-
case setting.UseMySQL:
127+
case setting.Database.UseMySQL:
128128
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/",
129-
models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host))
129+
setting.Database.User, setting.Database.Passwd, setting.Database.Host))
130130
defer db.Close()
131131
if err != nil {
132132
log.Fatalf("sql.Open: %v", err)
133133
}
134134
if _, err = db.Exec("CREATE DATABASE IF NOT EXISTS testgitea"); err != nil {
135135
log.Fatalf("db.Exec: %v", err)
136136
}
137-
case setting.UsePostgreSQL:
137+
case setting.Database.UsePostgreSQL:
138138
db, err := sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/?sslmode=%s",
139-
models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host, models.DbCfg.SSLMode))
139+
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.SSLMode))
140140
defer db.Close()
141141
if err != nil {
142142
log.Fatalf("sql.Open: %v", err)
143143
}
144-
rows, err := db.Query(fmt.Sprintf("SELECT 1 FROM pg_database WHERE datname = '%s'", models.DbCfg.Name))
144+
rows, err := db.Query(fmt.Sprintf("SELECT 1 FROM pg_database WHERE datname = '%s'", setting.Database.Name))
145145
if err != nil {
146146
log.Fatalf("db.Query: %v", err)
147147
}
@@ -153,10 +153,10 @@ func initIntegrationTest() {
153153
if _, err = db.Exec("CREATE DATABASE testgitea"); err != nil {
154154
log.Fatalf("db.Exec: %v", err)
155155
}
156-
case setting.UseMSSQL:
157-
host, port := models.ParseMSSQLHostPort(models.DbCfg.Host)
156+
case setting.Database.UseMSSQL:
157+
host, port := setting.ParseMSSQLHostPort(setting.Database.Host)
158158
db, err := sql.Open("mssql", fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;",
159-
host, port, "master", models.DbCfg.User, models.DbCfg.Passwd))
159+
host, port, "master", setting.Database.User, setting.Database.Passwd))
160160
if err != nil {
161161
log.Fatalf("sql.Open: %v", err)
162162
}

integrations/lfs_getobject_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func storeObjectInRepo(t *testing.T, repositoryID int64, content *[]byte) string
3939
assert.NoError(t, err)
4040
var lfsMetaObject *models.LFSMetaObject
4141

42-
if setting.UsePostgreSQL {
42+
if setting.Database.UsePostgreSQL {
4343
lfsMetaObject = &models.LFSMetaObject{ID: lfsID, Oid: oid, Size: int64(len(*content)), RepositoryID: repositoryID}
4444
} else {
4545
lfsMetaObject = &models.LFSMetaObject{Oid: oid, Size: int64(len(*content)), RepositoryID: repositoryID}

integrations/migration-test/migration_test.go

+24-24
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func initMigrationTest(t *testing.T) {
5454

5555
setting.NewContext()
5656
setting.CheckLFSVersion()
57-
models.LoadConfigs()
57+
setting.InitDBConfig()
5858
setting.NewLogServices(true)
5959
}
6060

@@ -64,7 +64,7 @@ func availableVersions() ([]string, error) {
6464
return nil, err
6565
}
6666
defer migrationsDir.Close()
67-
versionRE, err := regexp.Compile("gitea-v(?P<version>.+)\\." + regexp.QuoteMeta(models.DbCfg.Type) + "\\.sql.gz")
67+
versionRE, err := regexp.Compile("gitea-v(?P<version>.+)\\." + regexp.QuoteMeta(setting.Database.Type) + "\\.sql.gz")
6868
if err != nil {
6969
return nil, err
7070
}
@@ -85,7 +85,7 @@ func availableVersions() ([]string, error) {
8585
}
8686

8787
func readSQLFromFile(version string) (string, error) {
88-
filename := fmt.Sprintf("integrations/migration-test/gitea-v%s.%s.sql.gz", version, models.DbCfg.Type)
88+
filename := fmt.Sprintf("integrations/migration-test/gitea-v%s.%s.sql.gz", version, setting.Database.Type)
8989

9090
if _, err := os.Stat(filename); os.IsNotExist(err) {
9191
return "", nil
@@ -114,71 +114,71 @@ func restoreOldDB(t *testing.T, version string) bool {
114114
data, err := readSQLFromFile(version)
115115
assert.NoError(t, err)
116116
if len(data) == 0 {
117-
integrations.Printf("No db found to restore for %s version: %s\n", models.DbCfg.Type, version)
117+
integrations.Printf("No db found to restore for %s version: %s\n", setting.Database.Type, version)
118118
return false
119119
}
120120

121121
switch {
122-
case setting.UseSQLite3:
123-
os.Remove(models.DbCfg.Path)
124-
err := os.MkdirAll(path.Dir(models.DbCfg.Path), os.ModePerm)
122+
case setting.Database.UseSQLite3:
123+
os.Remove(setting.Database.Path)
124+
err := os.MkdirAll(path.Dir(setting.Database.Path), os.ModePerm)
125125
assert.NoError(t, err)
126126

127-
db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?cache=shared&mode=rwc&_busy_timeout=%d", models.DbCfg.Path, models.DbCfg.Timeout))
127+
db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?cache=shared&mode=rwc&_busy_timeout=%d", setting.Database.Path, setting.Database.Timeout))
128128
assert.NoError(t, err)
129129
defer db.Close()
130130

131131
_, err = db.Exec(data)
132132
assert.NoError(t, err)
133133
db.Close()
134134

135-
case setting.UseMySQL:
135+
case setting.Database.UseMySQL:
136136
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/",
137-
models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host))
137+
setting.Database.User, setting.Database.Passwd, setting.Database.Host))
138138
assert.NoError(t, err)
139139
defer db.Close()
140140

141-
_, err = db.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS %s", models.DbCfg.Name))
141+
_, err = db.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS %s", setting.Database.Name))
142142
assert.NoError(t, err)
143143

144-
_, err = db.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", models.DbCfg.Name))
144+
_, err = db.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", setting.Database.Name))
145145
assert.NoError(t, err)
146146

147147
db, err = sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?multiStatements=true",
148-
models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host, models.DbCfg.Name))
148+
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name))
149149
assert.NoError(t, err)
150150
defer db.Close()
151151

152152
_, err = db.Exec(data)
153153
assert.NoError(t, err)
154154
db.Close()
155155

156-
case setting.UsePostgreSQL:
156+
case setting.Database.UsePostgreSQL:
157157
db, err := sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/?sslmode=%s",
158-
models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host, models.DbCfg.SSLMode))
158+
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.SSLMode))
159159
assert.NoError(t, err)
160160
defer db.Close()
161161

162-
_, err = db.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS %s", models.DbCfg.Name))
162+
_, err = db.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS %s", setting.Database.Name))
163163
assert.NoError(t, err)
164164

165-
_, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s", models.DbCfg.Name))
165+
_, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s", setting.Database.Name))
166166
assert.NoError(t, err)
167167
db.Close()
168168

169169
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s",
170-
models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host, models.DbCfg.Name, models.DbCfg.SSLMode))
170+
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode))
171171
assert.NoError(t, err)
172172
defer db.Close()
173173

174174
_, err = db.Exec(data)
175175
assert.NoError(t, err)
176176
db.Close()
177177

178-
case setting.UseMSSQL:
179-
host, port := models.ParseMSSQLHostPort(models.DbCfg.Host)
178+
case setting.Database.UseMSSQL:
179+
host, port := setting.ParseMSSQLHostPort(setting.Database.Host)
180180
db, err := sql.Open("mssql", fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;",
181-
host, port, "master", models.DbCfg.User, models.DbCfg.Passwd))
181+
host, port, "master", setting.Database.User, setting.Database.Passwd))
182182
assert.NoError(t, err)
183183
defer db.Close()
184184

@@ -191,7 +191,7 @@ func restoreOldDB(t *testing.T, version string) bool {
191191
dbname := statement[5 : len(statement)-1]
192192
db.Close()
193193
db, err = sql.Open("mssql", fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;",
194-
host, port, dbname, models.DbCfg.User, models.DbCfg.Passwd))
194+
host, port, dbname, setting.Database.User, setting.Database.Passwd))
195195
assert.NoError(t, err)
196196
defer db.Close()
197197
}
@@ -210,7 +210,7 @@ func wrappedMigrate(x *xorm.Engine) error {
210210

211211
func doMigrationTest(t *testing.T, version string) {
212212
integrations.PrintCurrentTest(t)
213-
integrations.Printf("Performing migration test for %s version: %s\n", models.DbCfg.Type, version)
213+
integrations.Printf("Performing migration test for %s version: %s\n", setting.Database.Type, version)
214214
if !restoreOldDB(t, version) {
215215
return
216216
}
@@ -227,7 +227,7 @@ func doMigrationTest(t *testing.T, version string) {
227227
func TestMigrations(t *testing.T) {
228228
initMigrationTest(t)
229229

230-
dialect := models.DbCfg.Type
230+
dialect := setting.Database.Type
231231
versions, err := availableVersions()
232232
assert.NoError(t, err)
233233

models/convert.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@
44

55
package models
66

7-
import "fmt"
7+
import (
8+
"fmt"
9+
10+
"code.gitea.io/gitea/modules/setting"
11+
)
812

913
// ConvertUtf8ToUtf8mb4 converts database and tables from utf8 to utf8mb4 if it's mysql
1014
func ConvertUtf8ToUtf8mb4() error {
11-
_, err := x.Exec(fmt.Sprintf("ALTER DATABASE `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci", DbCfg.Name))
15+
_, err := x.Exec(fmt.Sprintf("ALTER DATABASE `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci", setting.Database.Name))
1216
if err != nil {
1317
return err
1418
}

models/migrations/migrations.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ func dropTableColumns(sess *xorm.Session, tableName string, columnNames ...strin
296296
// TODO: This will not work if there are foreign keys
297297

298298
switch {
299-
case setting.UseSQLite3:
299+
case setting.Database.UseSQLite3:
300300
// First drop the indexes on the columns
301301
res, errIndex := sess.Query(fmt.Sprintf("PRAGMA index_list(`%s`)", tableName))
302302
if errIndex != nil {
@@ -372,7 +372,7 @@ func dropTableColumns(sess *xorm.Session, tableName string, columnNames ...strin
372372
return err
373373
}
374374

375-
case setting.UsePostgreSQL:
375+
case setting.Database.UsePostgreSQL:
376376
cols := ""
377377
for _, col := range columnNames {
378378
if cols != "" {
@@ -383,7 +383,7 @@ func dropTableColumns(sess *xorm.Session, tableName string, columnNames ...strin
383383
if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE `%s` %s", tableName, cols)); err != nil {
384384
return fmt.Errorf("Drop table `%s` columns %v: %v", tableName, columnNames, err)
385385
}
386-
case setting.UseMySQL, setting.UseTiDB:
386+
case setting.Database.UseMySQL:
387387
// Drop indexes on columns first
388388
sql := fmt.Sprintf("SHOW INDEX FROM %s WHERE column_name IN ('%s')", tableName, strings.Join(columnNames, "','"))
389389
res, err := sess.Query(sql)
@@ -409,7 +409,7 @@ func dropTableColumns(sess *xorm.Session, tableName string, columnNames ...strin
409409
if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE `%s` %s", tableName, cols)); err != nil {
410410
return fmt.Errorf("Drop table `%s` columns %v: %v", tableName, columnNames, err)
411411
}
412-
case setting.UseMSSQL:
412+
case setting.Database.UseMSSQL:
413413
cols := ""
414414
for _, col := range columnNames {
415415
if cols != "" {

models/migrations/v19.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func generateAndMigrateGitHooks(x *xorm.Engine) (err error) {
4242
}
4343
)
4444

45-
return x.Where("id > 0").BufferSize(setting.IterateBufferSize).Iterate(new(Repository),
45+
return x.Where("id > 0").BufferSize(setting.Database.IterateBufferSize).Iterate(new(Repository),
4646
func(idx int, bean interface{}) error {
4747
repo := bean.(*Repository)
4848
user := new(User)

models/migrations/v22.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func generateAndMigrateWikiGitHooks(x *xorm.Engine) (err error) {
4242
}
4343
)
4444

45-
return x.Where("id > 0").BufferSize(setting.IterateBufferSize).Iterate(new(Repository),
45+
return x.Where("id > 0").BufferSize(setting.Database.IterateBufferSize).Iterate(new(Repository),
4646
func(idx int, bean interface{}) error {
4747
repo := bean.(*Repository)
4848
user := new(User)

models/migrations/v26.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func generateAndMigrateGitHookChains(x *xorm.Engine) (err error) {
3636
hookTpl = fmt.Sprintf("#!/usr/bin/env %s\ndata=$(cat)\nexitcodes=\"\"\nhookname=$(basename $0)\nGIT_DIR=${GIT_DIR:-$(dirname $0)}\n\nfor hook in ${GIT_DIR}/hooks/${hookname}.d/*; do\ntest -x \"${hook}\" || continue\necho \"${data}\" | \"${hook}\"\nexitcodes=\"${exitcodes} $?\"\ndone\n\nfor i in ${exitcodes}; do\n[ ${i} -eq 0 ] || exit ${i}\ndone\n", setting.ScriptType)
3737
)
3838

39-
return x.Where("id > 0").BufferSize(setting.IterateBufferSize).Iterate(new(Repository),
39+
return x.Where("id > 0").BufferSize(setting.Database.IterateBufferSize).Iterate(new(Repository),
4040
func(idx int, bean interface{}) error {
4141
repo := bean.(*Repository)
4242
user := new(User)

0 commit comments

Comments
 (0)