Skip to content

Commit 42498eb

Browse files
egeguneseleo007hors
authored
K8SPG-260: Fix restart after upgrade (#918)
* K8SPG-260: Fix restart after upgrade * fix envtest * Add cluster restart check to upgrade-minor tests * K8SPG-643: Always try stanza-upgrade after a failed stanza-create * fix upgrade-minor test * improve major-upgrade --------- Co-authored-by: Eleonora Zinchenko <[email protected]> Co-authored-by: Viacheslav Sarzhan <[email protected]>
1 parent c90380f commit 42498eb

File tree

80 files changed

+1076
-371
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+1076
-371
lines changed

e2e-tests/functions

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# set root repo relatively to a test dir
44
ROOT_REPO=${ROOT_REPO:-$(realpath ../../..)}
5-
CERT_MANAGER_VER="1.14.2"
5+
CERT_MANAGER_VER="1.15.3"
66
test_name=$(basename "$(pwd)")
77
source "${ROOT_REPO}/e2e-tests/vars.sh"
88

@@ -58,6 +58,25 @@ deploy_operator() {
5858
| kubectl -n "${OPERATOR_NS:-$NAMESPACE}" apply -f -
5959
}
6060

61+
update_operator() {
62+
local cw_prefix=""
63+
64+
if [[ $OPERATOR_NS ]]; then
65+
cw_prefix="cw-"
66+
fi
67+
68+
kubectl -n "${OPERATOR_NS:-$NAMESPACE}" apply --server-side --force-conflicts -f "${DEPLOY_DIR}/crd.yaml"
69+
kubectl -n "${OPERATOR_NS:-$NAMESPACE}" apply --server-side --force-conflicts -f "${DEPLOY_DIR}/${cw_prefix}rbac.yaml"
70+
71+
local disable_telemetry=true
72+
if [ "${test_name}" == "telemetry-transfer" ]; then
73+
disable_telemetry=false
74+
fi
75+
76+
kubectl -n "${OPERATOR_NS:-$NAMESPACE}" patch deployment percona-postgresql-operator -p \
77+
'{"spec":{"template":{"spec":{"containers":[{"name":"operator","image":"'${IMAGE}'"}]}}}}'
78+
}
79+
6180
deploy_operator_gh() {
6281
local git_tag="$1"
6382
local cw_prefix=""
@@ -740,3 +759,17 @@ get_container_image() {
740759

741760
echo "${IMAGE_BASE}:${operatorVersion}-ppg${pgVersion}-${component}"
742761
}
762+
763+
get_postgresql_logs() {
764+
local pgVersion=$1
765+
766+
for pod in $(kubectl get pods -l postgres-operator.crunchydata.com/data=postgres --no-headers | awk '{print $1}'); do
767+
local phase=$(kubectl -n ${NAMESPACE} get ${pod} -o jsonpath={".status.phase"})
768+
if [[ "${phase}" != "Running" ]]; then
769+
echo "Waiting for ${pod} to start running"
770+
continue
771+
fi
772+
echo "find /pgdata/pg${pgVersion}/log -type f -iname 'postgresql*.log' -exec tail -n 30 {} \;" \
773+
| kubectl -n ${NAMESPACE} exec -it ${pod} -- bash 2>/dev/null
774+
done
775+
}

e2e-tests/tests/major-upgrade/01-create-cluster.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ commands:
77
set -o xtrace
88
99
source ../../functions
10-
10+
1111
get_cr \
1212
| yq eval '
1313
.spec.postgresVersion = 12 |

e2e-tests/tests/major-upgrade/10-assert.yaml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
apiVersion: kuttl.dev/v1beta1
22
kind: TestAssert
33
timeout: 360
4+
commands:
5+
- script: |-
6+
kubectl -n ${NAMESPACE} get pg,pod,job
7+
sleep 5
48
---
59
apiVersion: pgv2.percona.com/v2
610
kind: PerconaPGCluster
@@ -20,3 +24,19 @@ status:
2024
ready: 3
2125
size: 3
2226
state: ready
27+
---
28+
kind: Job
29+
apiVersion: batch/v1
30+
metadata:
31+
labels:
32+
postgres-operator.crunchydata.com/cluster: major-upgrade
33+
postgres-operator.crunchydata.com/pgbackrest: ''
34+
postgres-operator.crunchydata.com/pgbackrest-backup: replica-create
35+
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
36+
ownerReferences:
37+
- apiVersion: pgv2.percona.com/v2
38+
kind: PerconaPGBackup
39+
controller: true
40+
blockOwnerDeletion: true
41+
status:
42+
succeeded: 1
Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,21 @@
11
apiVersion: kuttl.dev/v1beta1
22
kind: TestAssert
33
timeout: 660
4+
commands:
5+
- script: |-
6+
kubectl get postgrescluster major-upgrade \
7+
-n ${NAMESPACE} \
8+
-o yaml \
9+
| yq eval '.status.pgbackrest.repos' -
410
---
5-
kind: Job
6-
apiVersion: batch/v1
11+
apiVersion: postgres-operator.crunchydata.com/v1beta1
12+
kind: PostgresCluster
713
metadata:
8-
annotations:
9-
postgres-operator.crunchydata.com/pgbackrest-backup: backup-after-12-to-13
10-
labels:
11-
postgres-operator.crunchydata.com/pgbackrest-backup: manual
12-
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
13-
ownerReferences:
14-
- apiVersion: pgv2.percona.com/v2
15-
kind: PerconaPGBackup
16-
controller: true
17-
blockOwnerDeletion: true
14+
name: major-upgrade
1815
status:
19-
succeeded: 1
20-
---
21-
apiVersion: pgv2.percona.com/v2
22-
kind: PerconaPGBackup
23-
metadata:
24-
name: backup-after-12-to-13
25-
spec:
26-
pgCluster: major-upgrade
27-
repoName: repo1
28-
options:
29-
- --type=full
30-
status:
31-
state: Succeeded
16+
pgbackrest:
17+
repos:
18+
- bound: true
19+
name: repo2
20+
replicaCreateBackupComplete: true
21+
stanzaCreated: true
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
commands:
4+
- script: |-
5+
set -o errexit
6+
set -o xtrace
7+
8+
kubectl patch \
9+
-n $NAMESPACE \
10+
perconapgcluster major-upgrade \
11+
--type='json' \
12+
-p='[{"op": "replace", "path": "/spec/backups/pgbackrest/repos/0/name", "value": "repo2"}]'
Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
11
apiVersion: kuttl.dev/v1beta1
22
kind: TestAssert
3-
timeout: 720
3+
timeout: 660
44
---
5-
apiVersion: pgv2.percona.com/v2
6-
kind: PerconaPGRestore
5+
kind: Job
6+
apiVersion: batch/v1
77
metadata:
8-
name: restore-after-12-to-13
9-
spec:
10-
pgCluster: major-upgrade
11-
repoName: repo1
8+
annotations:
9+
postgres-operator.crunchydata.com/pgbackrest-backup: backup-after-12-to-13
10+
labels:
11+
postgres-operator.crunchydata.com/pgbackrest-backup: manual
12+
postgres-operator.crunchydata.com/pgbackrest-repo: repo2
13+
ownerReferences:
14+
- apiVersion: pgv2.percona.com/v2
15+
kind: PerconaPGBackup
16+
controller: true
17+
blockOwnerDeletion: true
1218
status:
13-
state: Succeeded
19+
succeeded: 1
1420
---
1521
apiVersion: pgv2.percona.com/v2
16-
kind: PerconaPGCluster
22+
kind: PerconaPGBackup
1723
metadata:
18-
name: major-upgrade
24+
name: backup-after-12-to-13
25+
spec:
26+
pgCluster: major-upgrade
27+
repoName: repo2
28+
options:
29+
- --type=full
1930
status:
20-
pgbouncer:
21-
ready: 3
22-
size: 3
23-
postgres:
24-
instances:
25-
- name: instance1
26-
ready: 3
27-
size: 3
28-
ready: 3
29-
size: 3
30-
state: ready
31+
state: Succeeded

e2e-tests/tests/major-upgrade/11-run-backup.yaml renamed to e2e-tests/tests/major-upgrade/12-run-backup.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ metadata:
44
name: backup-after-12-to-13
55
spec:
66
pgCluster: major-upgrade
7-
repoName: repo1
7+
repoName: repo2
88
options:
99
- --type=full
Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,52 @@
11
apiVersion: kuttl.dev/v1beta1
22
kind: TestAssert
3-
timeout: 30
3+
timeout: 720
4+
commands:
5+
- script: |-
6+
set -o errexit
7+
8+
kubectl -n ${NAMESPACE} get pod
9+
10+
for pod in $(kubectl -n ${NAMESPACE} get pods -l postgres-operator.crunchydata.com/data=postgres --no-headers | awk '{print $1}'); do
11+
phase=$(kubectl -n ${NAMESPACE} get pod/${pod} -o jsonpath={".status.phase"})
12+
if [[ "${phase}" != "Running" ]]; then
13+
echo "Waiting for ${pod} to start running"
14+
continue
15+
fi
16+
echo "PostgreSQL logs from ${pod}:"
17+
echo "find /pgdata/pg13/log -type f -iname 'postgresql*.log' -exec tail -n 30 {} \;" \
18+
| kubectl -n ${NAMESPACE} exec -it ${pod} -- bash 2>/dev/null
19+
done
20+
21+
sleep 30
22+
collectors:
23+
- type: pod
24+
selector: "postgres-operator.crunchydata.com/data=postgres"
25+
tail: 30
426
---
5-
kind: ConfigMap
6-
apiVersion: v1
27+
apiVersion: pgv2.percona.com/v2
28+
kind: PerconaPGRestore
729
metadata:
8-
name: 05-read-from-primary
9-
data:
10-
data: ' 100500'
30+
name: restore-after-12-to-13
31+
spec:
32+
pgCluster: major-upgrade
33+
repoName: repo2
34+
status:
35+
state: Succeeded
36+
---
37+
apiVersion: pgv2.percona.com/v2
38+
kind: PerconaPGCluster
39+
metadata:
40+
name: major-upgrade
41+
status:
42+
pgbouncer:
43+
ready: 3
44+
size: 3
45+
postgres:
46+
instances:
47+
- name: instance1
48+
ready: 3
49+
size: 3
50+
ready: 3
51+
size: 3
52+
state: ready

e2e-tests/tests/major-upgrade/12-run-restore.yaml renamed to e2e-tests/tests/major-upgrade/13-run-restore.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ metadata:
44
name: restore-after-12-to-13
55
spec:
66
pgCluster: major-upgrade
7-
repoName: repo1
7+
repoName: repo2
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 30
4+
---
5+
kind: ConfigMap
6+
apiVersion: v1
7+
metadata:
8+
name: 05-read-from-primary
9+
data:
10+
data: ' 100500'

0 commit comments

Comments
 (0)