mirror of
https://github.com/qdrant/qdrant.git
synced 2026-07-30 06:30:57 -05:00
Fixes appendable segment overflow (#9158): CoW-moving operations (e.g. set_payload by filter over indexed segments) and plain inserts used to pick a destination appendable segment without any size check, so a single large operation could pile every moved point into one segment far past the configured max_segment_size. The update path now respects the resolved optimizer threshold, mirrored into the segment holder as a soft size cap: - CoW-move destinations are re-checked per moved point; candidates at the cap are skipped, and the insert loops refuse destinations that reached it. - When no appendable segment has capacity left, the operation fails with the new recoverable `OperationError::OutOfAppendableCapacity`. - `LockedSegmentHolder::update_with_segment_provisioning` catches that error, provisions a fresh appendable segment (same machinery the optimization worker already used between operations), and re-applies the operation; per-point version checks make the re-run resume where it left off, exactly like WAL replay. The moving `process_*` entry points now take the segment holder lock plus an optional `SegmentProvisioning`, wired from the update worker, WAL replay, and failed-operation recovery. The edge shard passes no provisioning and no cap, keeping its behavior unchanged. The regression test from #9158 is included (adapted to configure the cap) and now passes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This dir contains a Justfile with recipes to build/check/run examples for edge packages. Install https://github.com/casey/just to use it.
Rust Qdrant Edge package
Rust Qdrant Edge workspace lives in the publish directory. It's a separate workspace, not tied to the main workspace.
The qdrant-edge package is autogenerated by the amalgamate.py script and placed in the ./publish/qdrant-edge directory (gitignored).
If you need to make changes in the qdrant-edge package, edit the original packages in this repo (/lib in the repo root).
just rs-examples
# Or, manually:
./amalgamate.py
cargo check -p examples
cargo run -p examples --bin demo
cargo run -p examples --bin …
(see full binary list in publish/examples/src/bin)
How to publish Rust Package to crates.io
- Update the
VERSIONin publish/amalgamate.py. - Run Qdrant Edge Rust Release workflow.
Python Qdrant Edge package
It's in the python directory. It's part of the main workspace, unlike the Rust package.
just py-build
just py-examples
Or, manually:
# Setup environment
cd lib/edge/python
python -m venv .venv
source .venv/bin/activate
pip install --user maturin
# Build and install the package:
cd lib/edge/python
maturin develop --no-default-features
# Run example:
python examples/demo.py