diff options
| author | 2024-03-07 13:56:33 +0000 | |
|---|---|---|
| committer | 2024-03-08 11:51:39 +0100 | |
| commit | 64187859c426e64b8d9a25593850766e6dcc7169 (patch) | |
| tree | dd9e8e970ae930bcb06e7cd26d5ea584aea55960 | |
| parent | [chore]: Bump github.com/stretchr/testify from 1.8.4 to 1.9.0 (#2714) (diff) | |
| download | gotosocial-64187859c426e64b8d9a25593850766e6dcc7169.tar.xz | |
[bugfix] add workaround for Xsqlite_interrupt() permanently breaking connection (#2731)
| -rw-r--r-- | internal/db/bundb/errors.go | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/internal/db/bundb/errors.go b/internal/db/bundb/errors.go index c8f39aebd..ddbb302f8 100644 --- a/internal/db/bundb/errors.go +++ b/internal/db/bundb/errors.go @@ -18,6 +18,7 @@ package bundb import ( + "database/sql/driver" "errors" "github.com/jackc/pgx/v5/pgconn" @@ -75,6 +76,27 @@ func processSQLiteError(err error) error { return errBusy case sqlite3.SQLITE_BUSY_TIMEOUT: return db.ErrBusyTimeout + + // WORKAROUND: + // text copied from matrix dev chat: + // + // okay i've found a workaround for now. so between + // v1.29.0 and v1.29.2 (modernc.org/sqlite) is that + // slightly tweaked interruptOnDone() behaviour, which + // causes interrupt to (imo, correctly) get called when + // a context is cancelled to cancel the running query. the + // issue is that every single query after that point seems + // to still then return interrupted. so as you thought, + // maybe that query count isn't being decremented. i don't + // think it's our code, but i haven't ruled it out yet. + // + // the workaround for now is adding to our sqlite error + // processor to replace an SQLITE_INTERRUPTED code with + // driver.ErrBadConn, which hints to the golang sql package + // that the conn needs to be closed and a new one opened + // + case sqlite3.SQLITE_INTERRUPT: + return driver.ErrBadConn } return err |
