From 36018c54a177a826d474caa64dee257a52d358a8 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Tue, 25 Nov 2025 12:14:35 +0100 Subject: [PATCH] stop retention user cleanup early again when DB connection attempt fails --- pkg/cluster/database.go | 20 +++++++++++++++++--- pkg/cluster/sync.go | 9 +-------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/pkg/cluster/database.go b/pkg/cluster/database.go index aac877bcf..56b5f3638 100644 --- a/pkg/cluster/database.go +++ b/pkg/cluster/database.go @@ -281,9 +281,23 @@ func findUsersFromRotation(rotatedUsers []string, db *sql.DB) (map[string]string return extraUsers, nil } -func (c *Cluster) cleanupRotatedUsers(rotatedUsers []string, db *sql.DB) error { +func (c *Cluster) cleanupRotatedUsers(rotatedUsers []string) error { c.setProcessName("checking for rotated users to remove from the database due to configured retention") - extraUsers, err := findUsersFromRotation(rotatedUsers, db) + + err := c.initDbConn() + if err != nil { + return fmt.Errorf("could not init db connection: %v", err) + } + defer func() { + if c.connectionIsClosed() { + return + } + if err := c.closeDbConn(); err != nil { + c.logger.Errorf("could not close database connection after removing users exceeding configured retention interval: %v", err) + } + }() + + extraUsers, err := findUsersFromRotation(rotatedUsers, c.pgDb) if err != nil { return fmt.Errorf("error when querying for deprecated users from password rotation: %v", err) } @@ -304,7 +318,7 @@ func (c *Cluster) cleanupRotatedUsers(rotatedUsers []string, db *sql.DB) error { } if retentionDate.After(userCreationDate) { c.logger.Infof("dropping user %q due to configured days in password_rotation_user_retention", rotatedUser) - if err = users.DropPgUser(rotatedUser, db); err != nil { + if err = users.DropPgUser(rotatedUser, c.pgDb); err != nil { c.logger.Errorf("could not drop role %q: %v", rotatedUser, err) continue } diff --git a/pkg/cluster/sync.go b/pkg/cluster/sync.go index a210790b3..b16d32d45 100644 --- a/pkg/cluster/sync.go +++ b/pkg/cluster/sync.go @@ -1089,16 +1089,9 @@ func (c *Cluster) syncSecrets() error { // remove rotation users that exceed the retention interval if len(retentionUsers) > 0 { - err := c.initDbConn() - if err != nil { - errors = append(errors, fmt.Sprintf("could not init db connection: %v", err)) - } - if err = c.cleanupRotatedUsers(retentionUsers, c.pgDb); err != nil { + if err := c.cleanupRotatedUsers(retentionUsers); err != nil { errors = append(errors, fmt.Sprintf("error removing users exceeding configured retention interval: %v", err)) } - if err := c.closeDbConn(); err != nil { - errors = append(errors, fmt.Sprintf("could not close database connection after removing users exceeding configured retention interval: %v", err)) - } } if len(errors) > 0 {