Skip to content

Commit ad0a2a8

Browse files
committed
Test recovery when Postgres parameters change
Issue: [sc-12371] Issue: [sc-12476] Issue: [sc-12933] Issue: [sc-13129] See: cb0bd8a See: ea25c57
1 parent ddf2ebd commit ad0a2a8

22 files changed

+429
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
# Create a cluster with a single pgBackRest repository and some parameters that
3+
# require attention during PostgreSQL recovery.
4+
apiVersion: postgres-operator.crunchydata.com/v1beta1
5+
kind: PostgresCluster
6+
metadata:
7+
name: original
8+
labels: { postgres-operator-test: kuttl }
9+
spec:
10+
postgresVersion: 14
11+
patroni:
12+
dynamicConfiguration:
13+
postgresql:
14+
parameters:
15+
max_connections: 200
16+
instances:
17+
- dataVolumeClaimSpec: { accessModes: [ReadWriteOnce], resources: { requests: { storage: 1Gi } } }
18+
backups:
19+
pgbackrest:
20+
manual:
21+
repoName: repo1
22+
repos:
23+
- name: repo1
24+
volume:
25+
volumeClaimSpec: { accessModes: [ReadWriteOnce], resources: { requests: { storage: 1Gi } } }
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
# Wait for the replica backup to complete.
3+
apiVersion: postgres-operator.crunchydata.com/v1beta1
4+
kind: PostgresCluster
5+
metadata:
6+
name: original
7+
status:
8+
pgbackrest:
9+
repos:
10+
- name: repo1
11+
replicaCreateBackupComplete: true
12+
stanzaCreated: true
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
# Create some data that will be restored.
3+
apiVersion: batch/v1
4+
kind: Job
5+
metadata:
6+
name: original-data
7+
labels: { postgres-operator-test: kuttl }
8+
spec:
9+
backoffLimit: 3
10+
template:
11+
metadata:
12+
labels: { postgres-operator-test: kuttl }
13+
spec:
14+
restartPolicy: Never
15+
containers:
16+
- name: psql
17+
image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:centos8-14.1-0
18+
env:
19+
- name: PGURI
20+
valueFrom: { secretKeyRef: { name: original-pguser-original, key: uri } }
21+
22+
# Do not wait indefinitely.
23+
- { name: PGCONNECT_TIMEOUT, value: '5' }
24+
25+
command:
26+
- psql
27+
- $(PGURI)
28+
- --set=ON_ERROR_STOP=1
29+
- --command
30+
- |
31+
CREATE TABLE important (data) AS VALUES ('treasure');
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
apiVersion: batch/v1
3+
kind: Job
4+
metadata:
5+
name: original-data
6+
status:
7+
succeeded: 1
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
apiVersion: kuttl.dev/v1beta1
3+
kind: TestStep
4+
commands:
5+
# Annotate the cluster to trigger a backup.
6+
- script: |
7+
kubectl annotate --namespace="${NAMESPACE}" postgrescluster/original \
8+
'postgres-operator.crunchydata.com/pgbackrest-backup=one'
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
# Wait for the backup job to complete.
3+
apiVersion: batch/v1
4+
kind: Job
5+
metadata:
6+
annotations:
7+
postgres-operator.crunchydata.com/pgbackrest-backup: one
8+
labels:
9+
postgres-operator.crunchydata.com/cluster: original
10+
postgres-operator.crunchydata.com/pgbackrest-backup: manual
11+
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
12+
status:
13+
succeeded: 1
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
# Clone the cluster using a pgBackRest restore.
3+
apiVersion: postgres-operator.crunchydata.com/v1beta1
4+
kind: PostgresCluster
5+
metadata:
6+
name: clone-one
7+
labels: { postgres-operator-test: kuttl }
8+
spec:
9+
dataSource:
10+
postgresCluster:
11+
clusterName: original
12+
repoName: repo1
13+
14+
postgresVersion: 14
15+
instances:
16+
- dataVolumeClaimSpec: { accessModes: [ReadWriteOnce], resources: { requests: { storage: 1Gi } } }
17+
backups:
18+
pgbackrest:
19+
repos:
20+
- name: repo1
21+
volume:
22+
volumeClaimSpec: { accessModes: [ReadWriteOnce], resources: { requests: { storage: 1Gi } } }
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
# Wait for the clone cluster to come online.
3+
apiVersion: postgres-operator.crunchydata.com/v1beta1
4+
kind: PostgresCluster
5+
metadata:
6+
name: clone-one
7+
status:
8+
instances:
9+
- name: '00'
10+
replicas: 1
11+
readyReplicas: 1
12+
updatedReplicas: 1
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
---
2+
# Confirm that all the data was restored.
3+
apiVersion: batch/v1
4+
kind: Job
5+
metadata:
6+
name: clone-one-data
7+
labels: { postgres-operator-test: kuttl }
8+
spec:
9+
backoffLimit: 3
10+
template:
11+
metadata:
12+
labels: { postgres-operator-test: kuttl }
13+
spec:
14+
restartPolicy: Never
15+
containers:
16+
- name: psql
17+
image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:centos8-14.1-0
18+
env:
19+
# Connect to the cluster using the restored database and original credentials.
20+
- name: PGHOST
21+
valueFrom: { secretKeyRef: { name: clone-one-pguser-clone-one, key: host } }
22+
- name: PGPORT
23+
valueFrom: { secretKeyRef: { name: clone-one-pguser-clone-one, key: port } }
24+
- name: PGDATABASE
25+
valueFrom: { secretKeyRef: { name: original-pguser-original, key: dbname } }
26+
- name: PGUSER
27+
valueFrom: { secretKeyRef: { name: original-pguser-original, key: user } }
28+
- name: PGPASSWORD
29+
valueFrom: { secretKeyRef: { name: original-pguser-original, key: password } }
30+
31+
# Do not wait indefinitely.
32+
- { name: PGCONNECT_TIMEOUT, value: '5' }
33+
34+
# Confirm that all the data was restored.
35+
# Note: the `$$$$` is reduced to `$$` by Kubernetes.
36+
# - https://kubernetes.io/docs/tasks/inject-data-application/
37+
command:
38+
- psql
39+
- -qa
40+
- --set=ON_ERROR_STOP=1
41+
- --command
42+
- |
43+
DO $$$$
44+
DECLARE
45+
restored jsonb;
46+
BEGIN
47+
SELECT jsonb_agg(important) INTO restored FROM important;
48+
ASSERT restored = '[{"data":"treasure"}]', format('got %L', restored);
49+
END $$$$;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
apiVersion: batch/v1
3+
kind: Job
4+
metadata:
5+
name: clone-one-data
6+
status:
7+
succeeded: 1

0 commit comments

Comments
 (0)