Skip to content

Commit

Permalink
Fix snapshot restoration and add integration test (#96)
Browse files Browse the repository at this point in the history
* Fix snapshot restoration and add integration test

* Fix updateConfigurationOnChange

* Add retries to all curl commands to fix flakiness in kind
  • Loading branch information
mac-chaffee authored Oct 16, 2023
1 parent 46e0d1f commit 2ddefd6
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 2 deletions.
2 changes: 1 addition & 1 deletion charts/qdrant/templates/configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ data:
SET_INDEX=${HOSTNAME##*-}
{{- if and (.Values.snapshotRestoration.enabled) (eq (.Values.replicaCount | quote) (1 | quote)) }}
echo "Starting initializing for pod $SET_INDEX and snapshots restoration"
./entrypoint.sh {{ range .Values.snapshotRestoration.snapshots }} --snapshot {{ . }} {{ end }}
exec ./entrypoint.sh --uri 'http://{{ include "qdrant.fullname" . }}-0.{{ include "qdrant.fullname" . }}-headless:6335' {{ range .Values.snapshotRestoration.snapshots }} --snapshot {{ . }} {{ end }}
{{- else }}
echo "Starting initializing for pod $SET_INDEX"
if [ "$SET_INDEX" = "0" ]; then
Expand Down
2 changes: 1 addition & 1 deletion charts/qdrant/templates/statefulset.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ spec:
metadata:
annotations:
{{- if (default .Values.updateConfigurationOnChange false) }}
checksum/config: {{ tpl (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
{{- end }}
{{- with .Values.podAnnotations }}
{{- toYaml . | nindent 8 }}
Expand Down
1 change: 1 addition & 0 deletions charts/qdrant/templates/tests/test-db-interaction.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ data:
set -xe
echo 'connect-timeout = 5' > $HOME/.curlrc
echo 'retry = 5' >> $HOME/.curlrc
echo 'retry-all-errors' >> $HOME/.curlrc
if [ -d /mnt/secrets/certs ]; then
cp /mnt/secrets/certs/ca.pem /usr/share/pki/trust/anchors/private-ca.pem
Expand Down
10 changes: 10 additions & 0 deletions test/integration/assets/snapshot-pvc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: snapshots-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
6 changes: 6 additions & 0 deletions test/integration/assets/snapshot-values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
updateConfigurationOnChange: true
snapshotRestoration:
enabled: true
pvcName: snapshots-pvc
# To be supplied via --set
snapshots: []
26 changes: 26 additions & 0 deletions test/integration/snapshot_restore.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Inspired by https://github.com/qdrant/qdrant/blob/v1.6.1/tests/snapshots/snapshots-recovery.sh

QDRANT_URL="http://qdrant.qdrant-helm-integration:6333"

setup_file() {
# Create the PVC, then helm upgrade with no snapshots so that the PVC gets mounted
kubectl apply -f test/integration/assets/snapshot-pvc.yaml -n qdrant-helm-integration
helm upgrade --install qdrant charts/qdrant -n qdrant-helm-integration -f test/integration/assets/snapshot-values.yaml --set snapshotRestoration.snapshots=null --wait
kubectl rollout status statefulset qdrant -n qdrant-helm-integration
}


@test "snapshot restoration works" {
# Create the test data and create a snapshot
helm test qdrant -n qdrant-helm-integration --logs
SNAPSHOT_NAME=$(kubectl exec -n default curl -- curl -X POST "$QDRANT_URL/collections/test_collection/snapshots" | grep -o 'test_collection.*\.snapshot')

# Delete the collection, then restore
kubectl exec -n default curl -- curl -X DELETE "$QDRANT_URL/collections/test_collection?wait"
helm upgrade --install qdrant charts/qdrant -n qdrant-helm-integration -f test/integration/assets/snapshot-values.yaml --set snapshotRestoration.snapshots="{/qdrant/snapshots/test_collection/$SNAPSHOT_NAME\:test_collection}" --wait
kubectl rollout status statefulset qdrant -n qdrant-helm-integration

run kubectl exec -n default curl -- curl -s $QDRANT_URL/collections/test_collection/points/6 --fail-with-body
[ $status -eq 0 ]
[[ "${output}" =~ .*\"Mumbai\".* ]]
}

0 comments on commit 2ddefd6

Please sign in to comment.