From 2efea31cfa15eb0485b1c538c1d8968c2e792b4f Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Thu, 15 Apr 2021 12:06:16 +0200 Subject: [PATCH] add special case for pooler role --- pkg/cluster/sync.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/pkg/cluster/sync.go b/pkg/cluster/sync.go index 4baba1c43..f7daa5012 100644 --- a/pkg/cluster/sync.go +++ b/pkg/cluster/sync.go @@ -577,9 +577,7 @@ func (c *Cluster) syncRoles() (err error) { }() for _, u := range c.systemUsers { - if u.Origin == spec.RoleOriginSystem { - systemUserNames = append(systemUserNames, u.Name) - } + systemUserNames = append(systemUserNames, u.Name) } dbUsers, err = c.readPgUsersFromDatabase(systemUserNames) @@ -589,6 +587,19 @@ func (c *Cluster) syncRoles() (err error) { if needMasterConnectionPooler(&c.Spec) || needReplicaConnectionPooler(&c.Spec) { connectionPoolerUser := c.systemUsers[constants.ConnectionPoolerUserKeyName] + + // check if pooler user exists in the database + dbPoolerUserMap, err := c.readPgUsersFromDatabase([]string{}) + if err != nil { + return fmt.Errorf("error getting pooler user from the database: %v", err) + } + + // if yes add role to dbUsers list so that there will be no add request + if _, exists := dbPoolerUserMap[connectionPoolerUser.Name]; exists { + dbUsers[connectionPoolerUser.Name] = dbPoolerUserMap[connectionPoolerUser.Name] + } + + // add to pgUsers to trigger add request in case no pooler user exists in DB if _, exists := c.pgUsers[connectionPoolerUser.Name]; !exists { c.pgUsers[connectionPoolerUser.Name] = connectionPoolerUser }