1
0
mirror of https://github.com/rancher/steve.git synced 2025-07-30 22:15:10 +00:00
steve/pkg/sqlcache/db
Silvio Moioli 772dc7577e
sql: use a closure to wrap transactions (#469)
This introduces the a `WithTransaction` function, which is then used for all transactional work in Steve.

Because `WithTransaction` takes care of all `Begin`s, `Commit`s and `Rollback`s, it eliminates the problem where forgotten open transactions can block all other operations (with long stalling and `SQLITE_BUSY` errors).

This also:

- merges together the disparate `DBClient` interfaces in one only `db.Client` interface with one unexported non-test implementation. I found this much easier to follow
- refactors the transaction package in order to make it as minimal as possible, and as close to the wrapped `sql.Tx` and `sql.Stmt` functions as possible, in order to reduce cognitive load when working with this part of the codebase
- simplifies tests accordingly
- adds a couple of known files to `.gitignore`
    
Credits to @tomleb for suggesting the approach: https://github.com/rancher/lasso/pull/121#pullrequestreview-2515872507
2025-02-05 10:05:52 +01:00
..
transaction sql: use a closure to wrap transactions (#469) 2025-02-05 10:05:52 +01:00
client_test.go sql: use a closure to wrap transactions (#469) 2025-02-05 10:05:52 +01:00
client.go sql: use a closure to wrap transactions (#469) 2025-02-05 10:05:52 +01:00
db_mocks_test.go sql: use a closure to wrap transactions (#469) 2025-02-05 10:05:52 +01:00
transaction_mocks_test.go sql: use a closure to wrap transactions (#469) 2025-02-05 10:05:52 +01:00
utility.go Move lasso SQL cache in Steve (#452) 2025-01-17 09:34:48 -05:00