From 7d193de25fbccc00923d6d791d6d4e0d2d5d498e Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Wed, 1 Sep 2021 10:08:21 +0100 Subject: Improve GetRemoteStatus and db.GetStatus() logic (#174) * only fetch status parents / children if explicity requested when dereferencing Signed-off-by: kim (grufwub) * Remove recursive DB GetStatus logic, don't fetch parent unless requested Signed-off-by: kim (grufwub) * StatusCache copies status so there are no thread-safety issues with modified status objects Signed-off-by: kim (grufwub) * remove sqlite test files Signed-off-by: kim (grufwub) * fix bugs introduced by previous commit Signed-off-by: kim (grufwub) * fix not continue on error in loop Signed-off-by: kim (grufwub) * use our own RunInTx implementation (possible fix for nested tx error) Signed-off-by: kim (grufwub) * fix cast statement to work with SQLite Signed-off-by: kim (grufwub) * be less strict about valid status in cache Signed-off-by: kim (grufwub) * add cache=shared ALWAYS for SQLite db instances Signed-off-by: kim (grufwub) * Fix EnrichRemoteAccount when updating account fails Signed-off-by: kim (grufwub) * add nolint tag Signed-off-by: kim (grufwub) * ensure file: prefixes the filename in sqlite addr Signed-off-by: kim (grufwub) * add an account cache, add status author account from db Signed-off-by: kim (grufwub) * Fix incompatible SQLite query Signed-off-by: kim (grufwub) * *actually* use the new getAccount() function in accountsDB Signed-off-by: kim (grufwub) * update cache tests to use test suite Signed-off-by: kim (grufwub) * add RelationshipTestSuite, add tests for methods with changed SQL Signed-off-by: kim (grufwub) --- internal/db/bundb/bundb.go | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'internal/db/bundb/bundb.go') diff --git a/internal/db/bundb/bundb.go b/internal/db/bundb/bundb.go index 248232fe3..6fcc56e51 100644 --- a/internal/db/bundb/bundb.go +++ b/internal/db/bundb/bundb.go @@ -91,6 +91,15 @@ func NewBunDBService(ctx context.Context, c *config.Config, log *logrus.Logger) conn = WrapDBConn(bun.NewDB(sqldb, pgdialect.New()), log) case dbTypeSqlite: // SQLITE + + // Drop anything fancy from DB address + c.DBConfig.Address = strings.Split(c.DBConfig.Address, "?")[0] + c.DBConfig.Address = strings.TrimPrefix(c.DBConfig.Address, "file:") + + // Append our own SQLite preferences + c.DBConfig.Address = "file:" + c.DBConfig.Address + "?cache=shared" + + // Open new DB instance var err error sqldb, err = sql.Open("sqlite", c.DBConfig.Address) if err != nil { @@ -98,7 +107,7 @@ func NewBunDBService(ctx context.Context, c *config.Config, log *logrus.Logger) } conn = WrapDBConn(bun.NewDB(sqldb, sqlitedialect.New()), log) - if strings.HasPrefix(strings.TrimPrefix(c.DBConfig.Address, "file:"), ":memory:") { + if c.DBConfig.Address == "file::memory:?cache=shared" { log.Warn("sqlite in-memory database should only be used for debugging") // don't close connections on disconnect -- otherwise @@ -121,11 +130,10 @@ func NewBunDBService(ctx context.Context, c *config.Config, log *logrus.Logger) conn.RegisterModel(t) } + accounts := &accountDB{config: c, conn: conn, cache: cache.NewAccountCache()} + ps := &bunDBService{ - Account: &accountDB{ - config: c, - conn: conn, - }, + Account: accounts, Admin: &adminDB{ config: c, conn: conn, @@ -165,9 +173,10 @@ func NewBunDBService(ctx context.Context, c *config.Config, log *logrus.Logger) conn: conn, }, Status: &statusDB{ - config: c, - conn: conn, - cache: cache.NewStatusCache(), + config: c, + conn: conn, + cache: cache.NewStatusCache(), + accounts: accounts, }, Timeline: &timelineDB{ config: c, -- cgit v1.3