summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorguillep2k <18600385+guillep2k@users.noreply.github.com>2020-02-26 20:51:37 -0300
committerGitHub <noreply@github.com>2020-02-27 07:51:37 +0800
commit4a2d23981d39be8559757b54f0201adcba5496c3 (patch)
treedf7a3847585ed389c7965c0f8752bb79f42bc457
parent7ffc2427daad725e448abfa1828b10acdba1a02c (diff)
downloadgitea-4a2d23981d39be8559757b54f0201adcba5496c3.tar.gz
gitea-4a2d23981d39be8559757b54f0201adcba5496c3.zip
Fix SQLite concurrency problems by using BEGIN IMMEDIATE (#10368)
* Test locking immediate for SQLite3 * fix url field separator Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: zeripath <art27@cantab.net>
-rw-r--r--integrations/migration-test/migration_test.go2
-rw-r--r--models/unit_tests.go2
-rw-r--r--modules/setting/database.go2
3 files changed, 3 insertions, 3 deletions
diff --git a/integrations/migration-test/migration_test.go b/integrations/migration-test/migration_test.go
index 6cdfbf7d7d..a4d01efef3 100644
--- a/integrations/migration-test/migration_test.go
+++ b/integrations/migration-test/migration_test.go
@@ -126,7 +126,7 @@ func restoreOldDB(t *testing.T, version string) bool {
err := os.MkdirAll(path.Dir(setting.Database.Path), os.ModePerm)
assert.NoError(t, err)
- db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?cache=shared&mode=rwc&_busy_timeout=%d", setting.Database.Path, setting.Database.Timeout))
+ db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?cache=shared&mode=rwc&_busy_timeout=%d&_txlock=immediate", setting.Database.Path, setting.Database.Timeout))
assert.NoError(t, err)
defer db.Close()
diff --git a/models/unit_tests.go b/models/unit_tests.go
index b9f894af7c..b2c487ddcd 100644
--- a/models/unit_tests.go
+++ b/models/unit_tests.go
@@ -88,7 +88,7 @@ func MainTest(m *testing.M, pathToGiteaRoot string) {
// CreateTestEngine creates a memory database and loads the fixture data from fixturesDir
func CreateTestEngine(fixturesDir string) error {
var err error
- x, err = xorm.NewEngine("sqlite3", "file::memory:?cache=shared")
+ x, err = xorm.NewEngine("sqlite3", "file::memory:?cache=shared&_txlock=immediate")
if err != nil {
return err
}
diff --git a/modules/setting/database.go b/modules/setting/database.go
index 911ac90a05..85043e8c11 100644
--- a/modules/setting/database.go
+++ b/modules/setting/database.go
@@ -126,7 +126,7 @@ func DBConnStr() (string, error) {
if err := os.MkdirAll(path.Dir(Database.Path), os.ModePerm); err != nil {
return "", fmt.Errorf("Failed to create directories: %v", err)
}
- connStr = fmt.Sprintf("file:%s?cache=shared&mode=rwc&_busy_timeout=%d", Database.Path, Database.Timeout)
+ connStr = fmt.Sprintf("file:%s?cache=shared&mode=rwc&_busy_timeout=%d&_txlock=immediate", Database.Path, Database.Timeout)
default:
return "", fmt.Errorf("Unknown database type: %s", Database.Type)
}