From 1c78d806e1626ce957d061f2770cb7418175be9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20=22BKC=22=20Carlb=C3=A4cker?= Date: Tue, 13 Jun 2017 03:02:49 +0200 Subject: [PATCH 1/2] SQLite has a query timeout. Fixes 'database locked' errors --- conf/app.ini | 2 ++ models/models.go | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/conf/app.ini b/conf/app.ini index 07164c27197af..29f7015c07069 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -166,6 +166,8 @@ PASSWD = SSL_MODE = disable ; For "sqlite3" and "tidb", use absolute path when you start as service PATH = data/gitea.db +; For "sqlite3" only. Query timeout +SQLITE_TIMEOUT = 500 [indexer] ISSUE_INDEXER_PATH = indexers/issues.bleve diff --git a/models/models.go b/models/models.go index 02499b6eb62cd..253c36ecacc83 100644 --- a/models/models.go +++ b/models/models.go @@ -66,6 +66,7 @@ var ( // DbCfg holds the database settings DbCfg struct { Type, Host, Name, User, Passwd, Path, SSLMode string + Timeout int } // EnableSQLite3 use SQLite3 @@ -151,6 +152,7 @@ func LoadConfigs() { } DbCfg.SSLMode = sec.Key("SSL_MODE").String() DbCfg.Path = sec.Key("PATH").MustString("data/gitea.db") + DbCfg.Timeout = sec.Key("SQLITE_TIMEOUT").MustInt(500) sec = setting.Cfg.Section("indexer") setting.Indexer.IssuePath = sec.Key("ISSUE_INDEXER_PATH").MustString("indexers/issues.bleve") @@ -220,7 +222,7 @@ func getEngine() (*xorm.Engine, error) { if err := os.MkdirAll(path.Dir(DbCfg.Path), os.ModePerm); err != nil { return nil, fmt.Errorf("Failed to create directories: %v", err) } - connStr = "file:" + DbCfg.Path + "?cache=shared&mode=rwc" + connStr = fmt.Sprintf("file:%s?cache=shared&mode=rwc&_busy_timeout=%d", DbCfg.Path, DbCfg.Timeout) case "tidb": if !EnableTiDB { return nil, errors.New("this binary version does not build support for TiDB") From 56104fe92a1ec786bcb1c804a22d9420761927a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20=22BKC=22=20Carlb=C3=A4cker?= Date: Thu, 15 Jun 2017 01:59:04 +0200 Subject: [PATCH 2/2] gofmt --- models/models.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/models.go b/models/models.go index 253c36ecacc83..02a782cde3231 100644 --- a/models/models.go +++ b/models/models.go @@ -66,7 +66,7 @@ var ( // DbCfg holds the database settings DbCfg struct { Type, Host, Name, User, Passwd, Path, SSLMode string - Timeout int + Timeout int } // EnableSQLite3 use SQLite3