Add serverless multi-collection benchmark mode - #173
Merged
Conversation
Introduce `bfb serverless {upload,clear,query}` for Qdrant Serverless:
lazily create per-tenant collections, route traffic with uniform/zipf
distributions, and drive the new QdrantServerless rust-client API.
The examples/ directory must match EXAMPLES; CI failed because the new YAML was present on disk but not listed.
- --rps paced requests one at a time; upload now uses an interval pacer with unbounded concurrency and query runs through the shared stats::process loop - upload/query failures set the stop flag but exited 0; the first error is now returned - upload throughput reported the requested count instead of acknowledged points; RPS/QPS series now come from the progress bar like regular search - accept --file / --example (ConfigArgs) so the registered serverless-upload example is reachable; wire an optional search YAML into `serverless query` via ConfigSearchGenerator (dense, sparse, filters, IDF corpus, dataset query sets) - derive a query template per dense and sparse vector when no YAML is given, skip empty collections, default to the shared 100k request count - record upsert latency, honour --jsonl-updates, and populate BenchmarkResults so --json / --jsonl-searches / --jsonl-rps work - per-slot create locks, verify preexisting collections against the YAML's vector shapes, lay point ids out contiguously across collections from --offset and cap totals by the dataset size - make client::retry_with_clients generic and drop the serverless copy; build serverless clients from the shared get_config - remove the unused queryable set and Notion references; document that the precision tier is left at the service default - keep only the qdrant-client bump in Cargo.lock Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Qdso7ZDKX1kUnn7VbPpVAE
Lists collections (optionally filtered by --collection-prefix) with their point counts and a total, so a space can be inspected before querying or clearing it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Qdso7ZDKX1kUnn7VbPpVAE
generall
approved these changes
Sep 2, 2026
generall
added a commit
that referenced
this pull request
Sep 2, 2026
* Add serverless multi-collection benchmark mode
Introduce `bfb serverless {upload,clear,query}` for Qdrant Serverless:
lazily create per-tenant collections, route traffic with uniform/zipf
distributions, and drive the new QdrantServerless rust-client API.
* Register serverless-upload in built-in examples catalog
The examples/ directory must match EXAMPLES; CI failed because the new
YAML was present on disk but not listed.
* Fix serverless mode review findings
- --rps paced requests one at a time; upload now uses an interval pacer
with unbounded concurrency and query runs through the shared
stats::process loop
- upload/query failures set the stop flag but exited 0; the first error
is now returned
- upload throughput reported the requested count instead of acknowledged
points; RPS/QPS series now come from the progress bar like regular search
- accept --file / --example (ConfigArgs) so the registered
serverless-upload example is reachable; wire an optional search YAML
into `serverless query` via ConfigSearchGenerator (dense, sparse,
filters, IDF corpus, dataset query sets)
- derive a query template per dense and sparse vector when no YAML is
given, skip empty collections, default to the shared 100k request count
- record upsert latency, honour --jsonl-updates, and populate
BenchmarkResults so --json / --jsonl-searches / --jsonl-rps work
- per-slot create locks, verify preexisting collections against the
YAML's vector shapes, lay point ids out contiguously across collections
from --offset and cap totals by the dataset size
- make client::retry_with_clients generic and drop the serverless copy;
build serverless clients from the shared get_config
- remove the unused queryable set and Notion references; document that
the precision tier is left at the service default
- keep only the qdrant-client bump in Cargo.lock
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qdso7ZDKX1kUnn7VbPpVAE
* Add `bfb serverless list`
Lists collections (optionally filtered by --collection-prefix) with their
point counts and a total, so a space can be inspected before querying or
clearing it.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qdso7ZDKX1kUnn7VbPpVAE
---------
Co-authored-by: Cursor Agent <agent@qdrant.dev>
Co-authored-by: generall <andrey@vasnetsov.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements the BFB for serverless proposal: a dedicated
bfb serverlessmode that benchmarks Qdrant Serverless by spreading traffic across many per-tenant collections (instead of one shared collection).src/serverless/module (CLI, client, registry, uniform/zipf routing, upload/clear/query)QdrantServerlessCollectionConfigqdrant-clienttodevtip withQdrantServerlessAll Submissions:
devbranch. Did you create your branch fromdev?New Feature Submissions:
cargo +nightly fmt --allcommand prior to submission?cargo clippy --all --all-featurescommand?Test plan
cargo test serverless(distribution allocate + config convert)cargo clippy --all-targets -- -D warningsbfb serverless --help/upload|clear|query --helpQDRANT_API_KEY