From 91e7659428bd68a08b0cfeaab1f0358f667ea99f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89mile=20R=C3=A9?= Date: Tue, 5 May 2026 17:27:01 +0400 Subject: [PATCH] Return errors from tracker pattern loads in dual-writes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Non-not-found errors from LoadByBannerIDTypeAndPattern were silently swallowed, risking partial state on DB failures. Signed-off-by: Émile Ré --- pkg/cookiebanner/service.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/pkg/cookiebanner/service.go b/pkg/cookiebanner/service.go index c8449aceb..d7dafabd8 100644 --- a/pkg/cookiebanner/service.go +++ b/pkg/cookiebanner/service.go @@ -1300,7 +1300,11 @@ func (s *Service) UpdateCookiePattern( } var tp coredata.TrackerPattern - if err := tp.LoadByBannerIDTypeAndPattern(ctx, tx, scope, pattern.CookieBannerID, coredata.TrackerTypeCookie, pattern.Pattern); err == nil { + if err := tp.LoadByBannerIDTypeAndPattern(ctx, tx, scope, pattern.CookieBannerID, coredata.TrackerTypeCookie, pattern.Pattern); err != nil { + if !errors.Is(err, coredata.ErrResourceNotFound) { + return fmt.Errorf("cannot load tracker pattern: %w", err) + } + } else { if req.DisplayName != nil { tp.DisplayName = *req.DisplayName } @@ -1358,7 +1362,11 @@ func (s *Service) DeleteCookiePattern( } var tp coredata.TrackerPattern - if err := tp.LoadByBannerIDTypeAndPattern(ctx, tx, scope, pattern.CookieBannerID, coredata.TrackerTypeCookie, pattern.Pattern); err == nil { + if err := tp.LoadByBannerIDTypeAndPattern(ctx, tx, scope, pattern.CookieBannerID, coredata.TrackerTypeCookie, pattern.Pattern); err != nil { + if !errors.Is(err, coredata.ErrResourceNotFound) { + return fmt.Errorf("cannot load tracker pattern: %w", err) + } + } else { if err := tp.Delete(ctx, tx, scope); err != nil { return fmt.Errorf("cannot delete tracker pattern: %w", err) } @@ -1423,7 +1431,11 @@ func (s *Service) MoveCookiePatternToCategory( } var tp coredata.TrackerPattern - if err := tp.LoadByBannerIDTypeAndPattern(ctx, tx, scope, pattern.CookieBannerID, coredata.TrackerTypeCookie, pattern.Pattern); err == nil { + if err := tp.LoadByBannerIDTypeAndPattern(ctx, tx, scope, pattern.CookieBannerID, coredata.TrackerTypeCookie, pattern.Pattern); err != nil { + if !errors.Is(err, coredata.ErrResourceNotFound) { + return fmt.Errorf("cannot load tracker pattern: %w", err) + } + } else { tp.CookieCategoryID = target.ID tp.UpdatedAt = time.Now() if err := tp.Update(ctx, tx, scope); err != nil {