Repository navigation
Python: handle Qdrant readiness race after collection creation conflict - #8381
Conversation
There was a problem hiding this comment.
🟢 Approval recommended
The retry is narrowly conditioned, bounded, and adequately covered without masking unrelated failures.
Pull request overview
Adds narrowly scoped retries for Qdrant’s transient post-conflict readiness failure.
Changes:
- Retries the specific HTTP 500 readiness response after creation conflicts.
- Adds coverage for success, schema mismatch, exhaustion, and unrelated errors.
- Documents local integration testing.
File summaries
| File | Description |
|---|---|
agent_framework_qdrant/_vector_store.py |
Implements bounded readiness retries. |
tests/qdrant/test_collection.py |
Adds regression coverage. |
README.md |
Documents integration-test setup. |
Review details
- Files reviewed: 3/3 changed files
- Comments generated: 0
- Review effort level: Balanced
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
MAF Automated Review — Iteration 1
Result: Findings reported
Scope: full PR (1 commit(s)): 216cd1674855
Model: gpt-5.6-sol-fast
Overview
The PR adds a narrowly matched, bounded asynchronous retry after REST creation conflicts and preserves schema validation once the collection becomes readable. Its tests cover eventual readiness, exhaustion, unrelated errors, and schema mismatch. However, the equivalent supported gRPC conflict path does not enable or handle the readiness retry, so concurrent creation can still fail for supplied clients configured to prefer gRPC.
Reviewed the supplied pull-request change set across correctness, security/reliability, architecture, and failure behavior.
1 verified finding remained after source verification (1 medium) across 1 file. Details are attached to the affected lines below.
Affected areas: python/packages/qdrant/agent_framework_qdrant/_vector_store.py
Motivation & Context
Concurrent Qdrant collection creation can return HTTP 409 to the losing caller before the winning creator has initialized the collection's shards. The immediate schema lookup then fails with HTTP 500 (
0 of 0 read operations failed). This caused both concurrent-creation integration cases to fail in the merge-queue job and was reproduced locally against Qdrant v1.16.2.Description & Review Guide
Related Issue
None.
Contribution Checklist
breaking changelabel (or add "[BREAKING]" to the title prefix, before or after any language prefix) — a workflow keeps the label and title prefix in sync automatically.