From 1dceb238687cde6e38654f0eaee7cab6240cbad0 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Tue, 13 Jan 2026 21:04:35 +0100 Subject: [PATCH] fix: drop sqlite shared cache (#10812) Use of sqlite shared cache is discouraged and obsolete. wal mode should be used instead. - https://sqlite.org/sharedcache.html#use_of_shared_cache_is_discouraged Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10812 Reviewed-by: Gusted Co-authored-by: Michael Kriese Co-committed-by: Michael Kriese --- modules/setting/database.go | 15 +++++++++++---- .../integration/migration-test/migration_test.go | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/modules/setting/database.go b/modules/setting/database.go index 91b3c90747..bd20edf9c2 100644 --- a/modules/setting/database.go +++ b/modules/setting/database.go @@ -239,12 +239,19 @@ func dbConnStrWithHost(host string) (string, error) { if err := os.MkdirAll(filepath.Dir(Database.Path), os.ModePerm); err != nil { return "", fmt.Errorf("failed to create directories: %w", err) } - journalMode := "" + opts := "" if Database.SQLiteJournalMode != "" { - journalMode = "&_journal_mode=" + Database.SQLiteJournalMode + opts = "&_journal_mode=" + Database.SQLiteJournalMode } - connStr = fmt.Sprintf("file:%s?cache=shared&mode=rwc&_busy_timeout=%d&_txlock=immediate%s", - Database.Path, Database.Timeout, journalMode) + + // in memory mode needs shared cache to be usable by multiple connections + // only used in tests normally + if Database.Path == ":memory:" { + opts += "&cache=shared" + } else { + opts += "&mode=rwc" + } + connStr = fmt.Sprintf("file:%s?_busy_timeout=%d&_txlock=immediate%s", Database.Path, Database.Timeout, opts) default: return "", fmt.Errorf("unknown database type: %s", Database.Type) } diff --git a/tests/integration/migration-test/migration_test.go b/tests/integration/migration-test/migration_test.go index 2bc57142e2..58d525a8f7 100644 --- a/tests/integration/migration-test/migration_test.go +++ b/tests/integration/migration-test/migration_test.go @@ -158,7 +158,7 @@ func restoreOldDB(t *testing.T, version string) bool { err := os.MkdirAll(path.Dir(setting.Database.Path), os.ModePerm) require.NoError(t, err) - db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?cache=shared&mode=rwc&_busy_timeout=%d&_txlock=immediate", setting.Database.Path, setting.Database.Timeout)) + db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?mode=rwc&_busy_timeout=%d&_txlock=immediate", setting.Database.Path, setting.Database.Timeout)) require.NoError(t, err) defer db.Close()