From 7225415b227a624b99f517d0dbe256acac929cb2 Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Thu, 29 Aug 2024 13:59:23 -0300 Subject: [PATCH] fix(sqlite): database is locked issue --- internals/guilddb/sqlite.go | 5 +++++ main.go | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/internals/guilddb/sqlite.go b/internals/guilddb/sqlite.go index 6cfc01f..98f9bcb 100644 --- a/internals/guilddb/sqlite.go +++ b/internals/guilddb/sqlite.go @@ -22,6 +22,7 @@ func NewSQLiteDB[C any](file string) (*SQLiteDB[C], error) { if err != nil { return &SQLiteDB[C]{}, err } + db.SetMaxOpenConns(1) return &SQLiteDB[C]{db}, nil } @@ -201,6 +202,8 @@ func (db *SQLiteDB[C]) selectMessages(query string, args ...any) ([]Message, err SELECT GuildID, ChannelID, ID, Language, OriginChannelID, OriginID FROM messages %s `, query), args...) + defer r.Close() + if err != nil { return []Message{}, errors.Join(ErrInternal, err) } @@ -435,6 +438,8 @@ func (db *SQLiteDB[C]) selectChannels(query string, args ...any) ([]Channel, err SELECT GuildID, ID, Language FROM channels %s `, query), args...) + defer r.Close() + if err != nil { return []Channel{}, errors.Join(ErrInternal, err) } diff --git a/main.go b/main.go index 8efb401..087a875 100644 --- a/main.go +++ b/main.go @@ -25,7 +25,11 @@ const ( // var translation_provider = flag.String("tprovider", string(GOOGLE_TRANSLATE), "Translation provider") var ( database_file = flag.String("db", "file:./guild.db", "SQLite database file/location") - discord_token = flag.String("token", os.Getenv("DISCORD_TOKEN"), "Discord bot authentication token") + discord_token = flag.String( + "token", + os.Getenv("DISCORD_TOKEN"), + "Discord bot authentication token", + ) ) func init() { @@ -39,7 +43,7 @@ func main() { ReportCaller: true, })) - db, err := guilddb.NewSQLiteDB[gconf.ConfigString](*database_file) + db, err := guilddb.NewSQLiteDB[gconf.ConfigString](*database_file + "?_busy_timeout=5000") if err != nil { logger.Error("Failed to open database connection", slog.String("err", err.Error())) return