Skip to content

Commit 1c1dd05

Browse files
egeguneshors
andauthored
K8SPG-884: Fix shared_preload_libraries order (#1339)
Co-authored-by: Viacheslav Sarzhan <[email protected]>
1 parent 5a83485 commit 1c1dd05

File tree

4 files changed

+121
-10
lines changed

4 files changed

+121
-10
lines changed

internal/controller/postgrescluster/controller.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -259,17 +259,18 @@ func (r *Reconciler) Reconcile(
259259
}
260260

261261
pgParameters := postgres.NewParameters()
262+
// K8SPG-577
263+
// K8SPG-884: pg_stat_statements must come before pg_stat_monitor
264+
if cluster.Spec.Extensions.PGStatStatements {
265+
pgstatstatements.PostgreSQLParameters(&pgParameters)
266+
}
262267
// K8SPG-375
263268
if cluster.Spec.Extensions.PGStatMonitor {
264269
pgstatmonitor.PostgreSQLParameters(&pgParameters)
265270
}
266271
if cluster.Spec.Extensions.PGAudit {
267272
pgaudit.PostgreSQLParameters(&pgParameters)
268273
}
269-
// K8SPG-577
270-
if cluster.Spec.Extensions.PGStatStatements {
271-
pgstatstatements.PostgreSQLParameters(&pgParameters)
272-
}
273274
pgbackrest.PostgreSQL(cluster, &pgParameters, backupsSpecFound)
274275
pgmonitor.PostgreSQLParameters(cluster, &pgParameters)
275276

internal/controller/postgrescluster/controller_test.go

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,4 +651,119 @@ spec:
651651
Expect(event).To(ContainSubstring("PG 12 will no longer receive updates. We recommend upgrading."))
652652
})
653653
})
654+
655+
Context("PG Extensions", func() {
656+
var cluster *v1beta1.PostgresCluster
657+
658+
BeforeEach(func() {
659+
cluster = create(`
660+
metadata:
661+
name: test-cluster
662+
spec:
663+
postgresVersion: 13
664+
image: postgres
665+
instances:
666+
- name: instance1
667+
initContainer:
668+
image: pg-operator
669+
dataVolumeClaimSpec:
670+
accessModes:
671+
- "ReadWriteMany"
672+
resources:
673+
requests:
674+
storage: 1Gi
675+
extensions:
676+
pgStatMonitor: false
677+
pgStatStatements: false
678+
pgAudit: false
679+
`)
680+
Expect(reconcile(cluster)).To(BeZero())
681+
})
682+
683+
AfterEach(func() {
684+
ctx := context.Background()
685+
686+
if cluster != nil {
687+
Expect(client.IgnoreNotFound(
688+
suite.Client.Delete(ctx, cluster),
689+
)).To(Succeed())
690+
691+
// Remove finalizers, if any, so the namespace can terminate.
692+
Expect(client.IgnoreNotFound(
693+
suite.Client.Patch(ctx, cluster, client.RawPatch(
694+
client.Merge.Type(), []byte(`{"metadata":{"finalizers":[]}}`))),
695+
)).To(Succeed())
696+
}
697+
})
698+
699+
getSharedLibraries := func(cfg map[string]any) string {
700+
Expect(cfg["bootstrap"]).ToNot(BeZero())
701+
bootstrap, ok := cfg["bootstrap"].(map[string]any)
702+
Expect(ok).To(BeTrue())
703+
704+
Expect(bootstrap["dcs"]).ToNot(BeZero())
705+
dcs, ok := bootstrap["dcs"].(map[string]any)
706+
Expect(ok).To(BeTrue())
707+
708+
Expect(dcs["postgresql"]).ToNot(BeZero())
709+
postgresql, ok := dcs["postgresql"].(map[string]any)
710+
Expect(ok).To(BeTrue())
711+
712+
Expect(postgresql["parameters"]).ToNot(BeZero())
713+
parameters, ok := postgresql["parameters"].(map[string]any)
714+
Expect(ok).To(BeTrue())
715+
716+
Expect(parameters["shared_preload_libraries"]).ToNot(BeZero())
717+
libraries, ok := parameters["shared_preload_libraries"].(string)
718+
Expect(ok).To(BeTrue())
719+
720+
return libraries
721+
}
722+
723+
It("appends pg_stat_monitor after pg_stat_statements", func() {
724+
ctx := context.Background()
725+
orig := cluster.DeepCopy()
726+
727+
cluster.Spec.Extensions.PGStatMonitor = true
728+
cluster.Spec.Extensions.PGAudit = true
729+
730+
Expect(suite.Client.Patch(ctx, cluster, client.MergeFrom(orig))).To(Succeed())
731+
Expect(reconcile(cluster)).To(BeZero())
732+
Expect(cluster.Status.Patroni.SystemIdentifier).To(BeZero())
733+
734+
ccm := &corev1.ConfigMap{}
735+
Expect(suite.Client.Get(ctx, client.ObjectKey{
736+
Namespace: test.Namespace.Name, Name: cluster.Name + "-config",
737+
}, ccm)).To(Succeed())
738+
Expect(ccm.Data["patroni.yaml"]).ToNot(BeZero())
739+
740+
var cfg map[string]any
741+
Expect(yaml.Unmarshal([]byte(ccm.Data["patroni.yaml"]), &cfg)).To(Succeed())
742+
743+
libraries := getSharedLibraries(cfg)
744+
Expect(libraries).To(Equal("pg_stat_monitor,pgaudit"))
745+
746+
orig = cluster.DeepCopy()
747+
748+
cluster.Spec.Extensions.PGStatStatements = true
749+
cluster.Spec.Extensions.PGStatMonitor = true
750+
cluster.Spec.Extensions.PGAudit = true
751+
752+
Expect(suite.Client.Patch(ctx, cluster, client.MergeFrom(orig))).To(Succeed())
753+
Expect(reconcile(cluster)).To(BeZero())
754+
Expect(cluster.Status.Patroni.SystemIdentifier).To(BeZero())
755+
756+
ccm = &corev1.ConfigMap{}
757+
Expect(suite.Client.Get(ctx, client.ObjectKey{
758+
Namespace: test.Namespace.Name, Name: cluster.Name + "-config",
759+
}, ccm)).To(Succeed())
760+
Expect(ccm.Data["patroni.yaml"]).ToNot(BeZero())
761+
762+
var cfg2 map[string]any
763+
Expect(yaml.Unmarshal([]byte(ccm.Data["patroni.yaml"]), &cfg2)).To(Succeed())
764+
765+
libraries = getSharedLibraries(cfg2)
766+
Expect(libraries).To(Equal("pg_stat_statements,pg_stat_monitor,pgaudit"))
767+
})
768+
})
654769
})

internal/pgstatmonitor/pgstatmonitor.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package pgstatmonitor
22

33
import (
44
"context"
5-
"strings"
65

76
"github.com/percona/percona-postgresql-operator/v2/internal/logging"
87
"github.com/percona/percona-postgresql-operator/v2/internal/postgres"
@@ -39,9 +38,6 @@ func DisableInPostgreSQL(ctx context.Context, exec postgres.Executor) error {
3938
}
4039

4140
func PostgreSQLParameters(outParameters *postgres.Parameters) {
42-
43-
shared := outParameters.Mandatory.Value("shared_preload_libraries")
44-
outParameters.Mandatory.Add("shared_preload_libraries",
45-
strings.TrimPrefix(shared+",pg_stat_monitor", ","))
41+
outParameters.Mandatory.AppendToList("shared_preload_libraries", "pg_stat_monitor")
4642
outParameters.Mandatory.Add("pg_stat_monitor.pgsm_query_max_len", "2048")
4743
}

internal/pgstatstatements/pgstatstatement.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ func DisableInPostgreSQL(ctx context.Context, exec postgres.Executor) error {
3838
}
3939

4040
func PostgreSQLParameters(outParameters *postgres.Parameters) {
41-
4241
outParameters.Mandatory.AppendToList("shared_preload_libraries", "pg_stat_statements")
4342
outParameters.Mandatory.Add("pg_stat_statements.track", "all")
4443
}

0 commit comments

Comments
 (0)