From 427ab1a9a4d6094d9f3a84e62f09cc396b49a09b Mon Sep 17 00:00:00 2001 From: SayaAndy Date: Sat, 25 Oct 2025 18:53:30 +0700 Subject: fix: make sure db transactions end always --- internal/mailer/mailer.go | 18 +++++++++++++++--- internal/router/client-cache.go | 6 +++++- 2 files changed, 20 insertions(+), 4 deletions(-) (limited to 'internal') diff --git a/internal/mailer/mailer.go b/internal/mailer/mailer.go index c146548..eb86d56 100644 --- a/internal/mailer/mailer.go +++ b/internal/mailer/mailer.go @@ -151,13 +151,17 @@ func (m *Mailer) MailIsTaken(email string) (bool, error) { if err != nil { return false, fmt.Errorf("failed to initialize transaction with db: %s", err) } + defer func(tx *sql.Tx) { + if err = tx.Commit(); err != nil { + tx.Rollback() + } + }(tx) var rows *sql.Rows if rows, err = tx.Query(`SELECT email FROM user_email_table WHERE email=? LIMIT 1;`, email); err != nil { tx.Rollback() return false, fmt.Errorf("failed to query user-email settings in db: %s", err) } - defer tx.Commit() defer rows.Close() isTaken := rows.Next() @@ -169,13 +173,17 @@ func (m *Mailer) GetInfo(userIdHash []byte) (email string, lang string, err erro if err != nil { return "", "", fmt.Errorf("failed to initialize transaction with db: %s", err) } + defer func(tx *sql.Tx) { + if err = tx.Commit(); err != nil { + tx.Rollback() + } + }(tx) var rows *sql.Rows if rows, err = tx.Query(`SELECT email, lang FROM user_email_table WHERE user_id=? LIMIT 1;`, userIdHash); err != nil { tx.Rollback() return "", "", fmt.Errorf("failed to query user-email settings in db: %s", err) } - defer tx.Commit() defer rows.Close() if !rows.Next() { @@ -325,6 +333,11 @@ func (m *Mailer) GetSubscriptions(userId string) (subscriptionType SubscriptionT if err != nil { return None, nil, fmt.Errorf("failed to initialize transaction with db: %s", err) } + defer func(tx *sql.Tx) { + if err = tx.Commit(); err != nil { + tx.Rollback() + } + }(tx) hash := m.GetHash(userId) @@ -333,7 +346,6 @@ func (m *Mailer) GetSubscriptions(userId string) (subscriptionType SubscriptionT tx.Rollback() return None, nil, fmt.Errorf("failed to query user-to-tags table in db for the user: %s", err) } - defer tx.Commit() defer rows.Close() if !rows.Next() { diff --git a/internal/router/client-cache.go b/internal/router/client-cache.go index d607cdd..26557d0 100644 --- a/internal/router/client-cache.go +++ b/internal/router/client-cache.go @@ -110,7 +110,11 @@ func (c *ClientCache) Close() error { return fmt.Errorf("fail to save blog_views: %s", err) } - return tx.Commit() + if err = tx.Commit(); err != nil { + tx.Rollback() + return fmt.Errorf("fail to commit all the changes related to cache: %s", err) + } + return nil } func (c *ClientCache) GetHash(id string) string { -- cgit v1.3.1+13