@@ -30,8 +30,15 @@ metadata:
3030spec:
3131 sgCluster: $CLUSTER_NAME
3232EOF
33- wait_until eval ' kubectl get sgbackup -n "$CLUSTER_NAMESPACE" "$OLD_BACKUP_NAME" -o json \
34- | jq ".status.process.status" -r | grep -qxF Completed'
33+
34+ wait_until is_backup_phase " $CLUSTER_NAMESPACE " " $OLD_BACKUP_NAME " " Completed"
35+ }
36+
37+ is_backup_phase () {
38+ local NAMESPACE=" $1 "
39+ local NAME=" $2 "
40+ local STATUS=" $3 "
41+ [ " $( kubectl get sgbackup -n " $NAMESPACE " " $NAME " -o=jsonpath=' {.status.process.status}' ) " = " $STATUS " ]
3542}
3643
3744e2e_test () {
@@ -41,6 +48,13 @@ e2e_test() {
4148
4249 run_test " Checking that replication is working from backup" check_replication_is_working_from_backup
4350
51+ if [ " $K8S_DISABLE_VOLUME_SNAPSHOT " != true ]
52+ then
53+ run_test " Checking that replication is working from snapshot backup" check_replication_is_working_from_snapshot_backup
54+ else
55+ echo " Skippping Checking that replication is working from snapshot backup"
56+ fi
57+
4458 run_test " Checking that replication is working from newly created backup" check_replication_is_working_from_newly_created_backup
4559
4660 run_test " Checking that metrics are exported" check_metrics
@@ -150,8 +164,75 @@ metadata:
150164spec:
151165 sgCluster: $CLUSTER_NAME
152166EOF
153- wait_until eval ' kubectl get sgbackup -n "$CLUSTER_NAMESPACE" "$BACKUP_NAME" -o json \
154- | jq ".status.process.status" -r | grep -qxF Completed'
167+
168+ wait_until is_backup_phase " $CLUSTER_NAMESPACE " " $BACKUP_NAME " " Completed"
169+
170+ create_or_replace_cluster " $CLUSTER_NAME " " $CLUSTER_NAMESPACE " " 2" \
171+ --set-string cluster.replication.initialization.mode=FromExistingBackup
172+ wait_pods_terminated " $CLUSTER_NAMESPACE " " 2" " $CLUSTER_NAME -[0-9]"
173+ wait_until kubectl get configmap -n " $CLUSTER_NAMESPACE " " $CLUSTER_NAME -replication-init" -o json \
174+ | jq ' .data.REPLICATION_INITIALIZATION_BACKUP' -r \
175+ | grep -q .
176+
177+ kubectl delete --ignore-not-found -n " $CLUSTER_NAMESPACE " pvc/" $CLUSTER_NAME -data-$CLUSTER_NAME -1" pod/" $CLUSTER_NAME -1" --wait=false
178+ wait_pods_running " $CLUSTER_NAMESPACE " " 2" " $CLUSTER_NAME -[0-9]"
179+
180+ PRIMARY_RESPONSE=" $( run_query -p 5432 -i 1 -h " $CLUSTER_NAME " -q " SELECT num FROM fibonacci ORDER BY num;" -d " test" ) "
181+ try_function wait_until eval '
182+ REPLICA_RESPONSE="$(run_query -p 5432 -i 0 -h "$CLUSTER_NAME-replicas" -q "SELECT num FROM fibonacci ORDER BY num;" -d "test")"
183+ [ "$(echo "$PRIMARY_RESPONSE" | tr -d "\n")" = "$(echo "$REPLICA_RESPONSE" | tr -d "\n")" ]
184+ '
185+ if " $RESULT "
186+ then
187+ success " replication is working"
188+ else
189+ fail " replication is not working. The records don't match between primary and replica for the fibonacci table"
190+ fi
191+
192+ if kubectl logs -n " $CLUSTER_NAMESPACE " " $CLUSTER_NAME -1" -c patroni | grep -q " ^[^ ]\+ [^ ]\+ INFO: replica has been created using backup$"
193+ then
194+ success " replication has bootstrapped from backup"
195+ else
196+ kubectl logs -n " $CLUSTER_NAMESPACE " " $CLUSTER_NAME -1" -c patroni | grep " ^[^ ]\+ [^ ]\+ INFO: replica has been created using" || true
197+ echo
198+ fail " replication has not bootstrapped from backup"
199+ fi
200+
201+ LATEST_BACKUP=" $( kubectl get sgbackup -n " $CLUSTER_NAMESPACE " --sort-by=' {.metadata.creationTimestamp}' -o name \
202+ | tail -n 1 | cut -d / -f 2) "
203+ if [ " x$LATEST_BACKUP " != x ] \
204+ && kubectl get configmap -n " $CLUSTER_NAMESPACE " " $CLUSTER_NAME -replication-init" -o json \
205+ | jq ' .data.REPLICATION_INITIALIZATION_BACKUP' -r \
206+ | grep -qxF " $LATEST_BACKUP "
207+ then
208+ success " replication has bootstrapped from latest backup"
209+ else
210+ fail " replication has not bootstrapped from latest backup"
211+ fi
212+ }
213+
214+ check_replication_is_working_from_snapshot_backup () {
215+ create_or_replace_cluster " $CLUSTER_NAME " " $CLUSTER_NAMESPACE " 1 \
216+ --set cluster.configurations.backups.useVolumeSnapshot=true
217+
218+ wait_pods_terminated " $CLUSTER_NAMESPACE " " 1" " $CLUSTER_NAME -[0-9]"
219+
220+ wait_until eval ' kubectl get cronjob -n "$CLUSTER_NAMESPACE" "$BACKUP_CLUSTER_NAME" -o json \
221+ | jq ".spec.template.spec.containers[0].env | any(.name == \"USE_VOLUME_SNAPSHOT\" and .value == \"true\")"'
222+
223+ kubectl delete sgbackup -n " $CLUSTER_NAMESPACE " " $BACKUP_NAME "
224+
225+ cat << EOF | kubectl create -f -
226+ apiVersion: stackgres.io/v1
227+ kind: SGBackup
228+ metadata:
229+ namespace: $CLUSTER_NAMESPACE
230+ name: $BACKUP_NAME
231+ spec:
232+ sgCluster: $CLUSTER_NAME
233+ EOF
234+
235+ wait_until is_backup_phase " $CLUSTER_NAMESPACE " " $BACKUP_NAME " " Completed"
155236
156237 create_or_replace_cluster " $CLUSTER_NAME " " $CLUSTER_NAMESPACE " " 2" \
157238 --set-string cluster.replication.initialization.mode=FromExistingBackup
160241 | jq ' .data.REPLICATION_INITIALIZATION_BACKUP' -r \
161242 | grep -q .
162243
163- kubectl delete -n " $CLUSTER_NAMESPACE " pvc/" $CLUSTER_NAME -data-$CLUSTER_NAME -1" pod/" $CLUSTER_NAME -1" --wait=false
244+ kubectl delete --ignore-not-found - n " $CLUSTER_NAMESPACE " pvc/" $CLUSTER_NAME -data-$CLUSTER_NAME -1" pod/" $CLUSTER_NAME -1" --wait=false
164245 wait_pods_running " $CLUSTER_NAMESPACE " " 2" " $CLUSTER_NAME -[0-9]"
165246
166247 PRIMARY_RESPONSE=" $( run_query -p 5432 -i 1 -h " $CLUSTER_NAME " -q " SELECT num FROM fibonacci ORDER BY num;" -d " test" ) "
@@ -212,7 +293,7 @@ check_replication_is_working_from_newly_created_backup() {
212293 --set-string cluster.replication.initialization.mode=FromNewlyCreatedBackup \
213294 --set-string cluster.replication.initialization.backupNewerThan=" PT$(( NOW - BACKUP_END_TIMESTAMP )) S"
214295
215- kubectl delete -n " $CLUSTER_NAMESPACE " pvc/" $CLUSTER_NAME -data-$CLUSTER_NAME -1" pod/" $CLUSTER_NAME -1" --wait=false
296+ kubectl delete --ignore-not-found - n " $CLUSTER_NAMESPACE " pvc/" $CLUSTER_NAME -data-$CLUSTER_NAME -1" pod/" $CLUSTER_NAME -1" --wait=false
216297 wait_pods_running " $CLUSTER_NAMESPACE " " 2" " $CLUSTER_NAME -[0-9]"
217298
218299 PRIMARY_RESPONSE=" $( run_query -p 5432 -i 1 -h " $CLUSTER_NAME " -q " SELECT num FROM fibonacci ORDER BY num;" -d " test" ) "
0 commit comments