From 8fa74fd046823e8b45a29f3c9336dfc273a7ace5 Mon Sep 17 00:00:00 2001 From: "Felipe M." Date: Fri, 13 Jun 2025 09:26:49 +0200 Subject: [PATCH 1/2] fix: database tests for cache --- internal/cache/cache_test.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/cache/cache_test.go b/internal/cache/cache_test.go index b04d260..7038276 100644 --- a/internal/cache/cache_test.go +++ b/internal/cache/cache_test.go @@ -1,6 +1,8 @@ package cache import ( + "fmt" + "os" "testing" "time" @@ -8,15 +10,16 @@ import ( ) func TestCache(t *testing.T) { - // Create temporary database for testing - database, err := db.New("test_cache.db") + // Create temporary database for testing with unique name + dbFile := fmt.Sprintf("test_cache_%d.db", time.Now().UnixNano()) + database, err := db.New(dbFile) if err != nil { t.Fatalf("Failed to create test database: %v", err) } defer func() { _ = database.Close() // Clean up test database file - // os.Remove("test_cache.db") + _ = os.Remove(dbFile) }() // Create cache instance @@ -76,6 +79,9 @@ func TestCache(t *testing.T) { t.Run("Exists", func(t *testing.T) { existsKey := "exists_key" + // Make sure the key doesn't exist initially by deleting it + _ = cache.Delete(existsKey) + // Should not exist initially exists, err := cache.Exists(existsKey) if err != nil { From 1e0bc86b21677bdddf8f99f5885df78ec6fa7eb9 Mon Sep 17 00:00:00 2001 From: "Felipe M." Date: Fri, 13 Jun 2025 09:27:06 +0200 Subject: [PATCH 2/2] feat: improve sqlite database reliability --- internal/db/db.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/internal/db/db.go b/internal/db/db.go index caae834..e40794d 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -35,6 +35,11 @@ func New(dbPath string) (*Database, error) { return nil, err } + // Configure SQLite for better reliability + if err := configureSQLite(db); err != nil { + return nil, err + } + // Initialize database if err := initDatabase(db); err != nil { return nil, err @@ -794,6 +799,32 @@ func initDatabase(db *sql.DB) error { return nil } +// Configure SQLite for better reliability +func configureSQLite(db *sql.DB) error { + pragmas := []string{ + // Enable Write-Ahead Logging for better concurrency and crash recovery + "PRAGMA journal_mode = WAL", + // Set 5-second timeout when database is locked by another connection + "PRAGMA busy_timeout = 5000", + // Balance between safety and performance for disk writes + "PRAGMA synchronous = NORMAL", + // Set large cache size (1GB) for better read performance + "PRAGMA cache_size = 1000000000", + // Enable foreign key constraint enforcement + "PRAGMA foreign_keys = true", + // Store temporary tables and indices in memory for speed + "PRAGMA temp_store = memory", + } + + for _, pragma := range pragmas { + if _, err := db.Exec(pragma); err != nil { + return fmt.Errorf("failed to execute %s: %w", pragma, err) + } + } + + return nil +} + // CacheGet retrieves a value from the cache func (d *Database) CacheGet(key string) (string, error) { query := `