From 7887ebbbcee853a7d6e1bb5360c63d818179c397 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Thu, 26 Jan 2023 09:43:03 +0100 Subject: [PATCH] set wal_level config not on empty parameters map (#2189) * set wal_level config not on empty parameters map * UPDATE event must trigger statefulSet sync when streams are added --- pkg/cluster/cluster.go | 9 ++++++++- pkg/cluster/sync.go | 5 ++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index 723fa4171..590fe6564 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -836,6 +836,11 @@ func (c *Cluster) Update(oldSpec, newSpec *acidv1.Postgresql) error { c.logger.Infof("Storage resize is disabled (storage_resize_mode is off). Skipping volume sync.") } + // streams configuration + if len(oldSpec.Spec.Streams) == 0 && len(newSpec.Spec.Streams) > 0 { + syncStatefulSet = true + } + // Statefulset func() { oldSs, err := c.generateStatefulSet(&oldSpec.Spec) @@ -851,6 +856,7 @@ func (c *Cluster) Update(oldSpec, newSpec *acidv1.Postgresql) error { updateFailed = true return } + if syncStatefulSet || !reflect.DeepEqual(oldSs, newSs) { c.logger.Debugf("syncing statefulsets") syncStatefulSet = false @@ -942,6 +948,7 @@ func (c *Cluster) Update(oldSpec, newSpec *acidv1.Postgresql) error { updateFailed = true } + // streams if len(newSpec.Spec.Streams) > 0 { if err := c.syncStreams(); err != nil { c.logger.Errorf("could not sync streams: %v", err) @@ -1034,7 +1041,7 @@ func (c *Cluster) Delete() { } -//NeedsRepair returns true if the cluster should be included in the repair scan (based on its in-memory status). +// NeedsRepair returns true if the cluster should be included in the repair scan (based on its in-memory status). func (c *Cluster) NeedsRepair() (bool, acidv1.PostgresStatus) { c.specMu.RLock() defer c.specMu.RUnlock() diff --git a/pkg/cluster/sync.go b/pkg/cluster/sync.go index 7fc97d9ea..477cbdc75 100644 --- a/pkg/cluster/sync.go +++ b/pkg/cluster/sync.go @@ -403,7 +403,10 @@ func (c *Cluster) syncStatefulSet() error { c.logger.Warnf("could not get list of pods to apply PostgreSQL parameters only to be set via Patroni API: %v", err) } - requiredPgParameters := c.Spec.Parameters + requiredPgParameters := make(map[string]string) + for k, v := range c.Spec.Parameters { + requiredPgParameters[k] = v + } // if streams are defined wal_level must be switched to logical if len(c.Spec.Streams) > 0 { requiredPgParameters["wal_level"] = "logical"