From 43ab12aed84fe32fec3065724e8a04f5ec7da4ac Mon Sep 17 00:00:00 2001 From: Bastian Hofmann Date: Thu, 22 Oct 2026 16:22:43 +0200 Subject: [PATCH 1/2] Qdrant 1.20.0 --- CHANGELOG.md | 4 ++++ charts/qdrant/CHANGELOG.md | 6 ++---- charts/qdrant/Chart.yaml | 16 +++------------- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index efbf9a7..afb1bfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [qdrant-1.20.0](https://github.com/qdrant/qdrant-helm/tree/qdrant-1.20.0) (2026-10-22) + +- Update Qdrant to v1.20.0 + ## [qdrant-1.19.2](https://github.com/qdrant/qdrant-helm/tree/qdrant-1.19.2) (2026-10-06) - Update Qdrant to v1.19.2 diff --git a/charts/qdrant/CHANGELOG.md b/charts/qdrant/CHANGELOG.md index 4200c05..a7ffa8d 100644 --- a/charts/qdrant/CHANGELOG.md +++ b/charts/qdrant/CHANGELOG.md @@ -1,7 +1,5 @@ # Changelog -## [qdrant-1.19.2](https://github.com/qdrant/qdrant-helm/tree/qdrant-1.19.2) (2026-10-06) +## [qdrant-1.20.0](https://github.com/qdrant/qdrant-helm/tree/qdrant-1.20.0) (2026-10-22) -- Update Qdrant to v1.19.2 -- Support exisiting ServiceAccount [#482](https://github.com/qdrant/qdrant-helm/pull/482) -- Support templating in env valueFrom [#509](https://github.com/qdrant/qdrant-helm/pull/509) +- Update Qdrant to v1.20.0 diff --git a/charts/qdrant/Chart.yaml b/charts/qdrant/Chart.yaml index d18d68a..1a013ba 100644 --- a/charts/qdrant/Chart.yaml +++ b/charts/qdrant/Chart.yaml @@ -13,20 +13,10 @@ maintainers: url: https://github.com/qdrant icon: https://qdrant.github.io/qdrant-helm/logo_with_text.svg type: application -version: 1.19.2 -appVersion: v1.19.2 +version: 1.20.0 +appVersion: v1.20.0 annotations: artifacthub.io/category: database artifacthub.io/changes: | - kind: added - description: Update Qdrant to v1.19.2 - - kind: added - description: Support exisiting ServiceAccount - links: - - name: GitHub Pull Request - url: https://github.com/qdrant/qdrant-helm/pull/482 - - kind: added - description: Support templating in env valueFrom - links: - - name: GitHub Pull Request - url: https://github.com/qdrant/qdrant-helm/pull/509 + description: Update Qdrant to v1.20.0 From 7046af55ecebecfcad92c3af0e4956082ae73373 Mon Sep 17 00:00:00 2001 From: Bastian Hofmann Date: Thu, 22 Oct 2026 16:40:07 +0200 Subject: [PATCH 2/2] Add multi node test with api key --- test/integration/multi_node_api_key.bats | 77 ++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 test/integration/multi_node_api_key.bats diff --git a/test/integration/multi_node_api_key.bats b/test/integration/multi_node_api_key.bats new file mode 100644 index 0000000..6432932 --- /dev/null +++ b/test/integration/multi_node_api_key.bats @@ -0,0 +1,77 @@ +setup_file() { + # Using a custom namespace to avoid side effects with other tests + kubectl create ns qdrant-multinode-apikey + # No --wait: non-zero peers may crash once if they start before the bootstrap peer is reachable, + # which makes helm's wait fail, while the rollout recovers after the restart. + helm upgrade --install qdrant charts/qdrant -n qdrant-multinode-apikey --set replicaCount=2 --set apiKey=foobar + kubectl rollout status statefulset qdrant -n qdrant-multinode-apikey --timeout 3m +} + +@test "all peers join the cluster" { + for i in $(seq 1 30); do + run kubectl exec -n default curl -- curl -s http://qdrant.qdrant-multinode-apikey:6333/cluster -H 'api-key: foobar' --fail-with-body + peers=$(echo "${output}" | grep -o '"uri"' | wc -l) + if [ "${peers}" -eq 2 ]; then + return 0 + fi + sleep 2 + done + echo "Expected 2 peers, got ${peers}: ${output}" + return 1 +} + +@test "replicated collection works with internal auth" { + run kubectl exec -n default curl -- curl -s -X PUT http://qdrant.qdrant-multinode-apikey:6333/collections/test_collection -H 'api-key: foobar' -H 'Content-Type: application/json' --fail-with-body \ + --data-raw '{"vectors": {"size": 4, "distance": "Dot"}, "shard_number": 2, "replication_factor": 2}' + [ $status -eq 0 ] + [[ "${output}" =~ .*\"status\":\"ok\".* ]] + + # Wait until all shard replicas are active on both peers + for i in $(seq 1 30); do + run kubectl exec -n default curl -- curl -s http://qdrant-0.qdrant-headless.qdrant-multinode-apikey:6333/collections/test_collection/cluster -H 'api-key: foobar' --fail-with-body + active=$(echo "${output}" | grep -o '"state":"Active"' | wc -l) + if [ "${active}" -eq 4 ]; then + break + fi + sleep 2 + done + [ "${active}" -eq 4 ] + + # Writes are forwarded to the replica on the other peer via the internal p2p API + run kubectl exec -n default curl -- curl -s -X PUT "http://qdrant.qdrant-multinode-apikey:6333/collections/test_collection/points?wait=true" -H 'api-key: foobar' -H 'Content-Type: application/json' --fail-with-body \ + --data-raw '{"points": [{"id": 1, "vector": [0.05, 0.61, 0.76, 0.74]}, {"id": 2, "vector": [0.19, 0.81, 0.75, 0.11]}, {"id": 3, "vector": [0.36, 0.55, 0.47, 0.94]}]}' + [ $status -eq 0 ] + [[ "${output}" =~ .*\"status\":\"completed\".* ]] + + # Every peer holds a full copy and must see all points + for pod in qdrant-0 qdrant-1; do + run kubectl exec -n default curl -- curl -s -X POST "http://${pod}.qdrant-headless.qdrant-multinode-apikey:6333/collections/test_collection/points/count" -H 'api-key: foobar' -H 'Content-Type: application/json' --fail-with-body \ + --data-raw '{"exact": true}' + [ $status -eq 0 ] + [[ "${output}" =~ .*\"count\":3.* ]] + done +} + +@test "no warnings in logs" { + for pod in qdrant-0 qdrant-1; do + run kubectl logs -n qdrant-multinode-apikey ${pod} + [ $status -eq 0 ] + # Ignore transient connection errors while the other peer is still starting up + warnings=$(echo "${output}" | grep -E "WARN|ERROR" | grep -v "Failed to send message to .* error: transport error" || true) + if [[ -n "${warnings}" ]]; then + echo "Found warning output in ${pod}:" + echo "${warnings}" + return 1 + fi + done +} + +@test "helm test - multi node with api key" { + run helm test qdrant -n qdrant-multinode-apikey --logs + [ $status -eq 0 ] +} + +teardown_file() { + helm uninstall qdrant -n qdrant-multinode-apikey + kubectl delete ns qdrant-multinode-apikey +}