Commit Graph

3618 Commits

Author SHA1 Message Date
Ivan Pleshkov
8df3dda006 Scalar quantization encoding parameter (#7602)
* scalar quantization encoding parameter

fix ci

remove method

review remarks

fix ci

* uint8 - int8
2025-12-01 12:03:36 +01:00
Arnaud Gourlay
eba78a6728 Fix Gridstore has pointer lookup to account for nature of pending operation (#7638) 2025-12-01 10:55:44 +01:00
AMIR
4f13b994e3 Add list shard keys API (#7615) 2025-11-28 21:50:09 -03:00
Arnaud Gourlay
bf564a40cf Improve timeout logic for Telemetry (#7607)
* Improve timeout logic for Telemetry

* assert!

* fix misuses of StoppinGuard

* decrease timeout for each shard
2025-11-27 16:43:56 +01:00
Roman Titov
3daaba2f0e Make snapshot_manifest methods async (#7629)
* Make `snapshot_manifest` methods `async`, so that they don't block async runtime

* Spawn `restore_shard_snapshot` task on `update` runtime instead of "current"
2025-11-27 20:32:24 +05:30
Arnaud Gourlay
9b5cca03ae Standardize delete payload index terminology (#7630) 2025-11-27 16:01:00 +01:00
Luis Cossío
6ca3e46638 Fix wiping of Gridstore (#7627)
* fix wiping of gridstore

* clippy

* address @timvisee's review
2025-11-27 11:38:19 -03:00
Luis Cossío
0c61bffb70 homogenize bench for aarch64 too (#7628) 2025-11-27 11:34:38 -03:00
tellet-q
7b11a3782e Add a ClusterOperation to execute a sleep on the node (#7616)
* Add TestSlowDown ClusterOperation to execute a sleep on the node
2025-11-27 15:31:24 +01:00
Arnaud Gourlay
3babcfb1df Fix BufferedDynamicFlags flushing with concurrent drop/deletion (#7621)
* Fix BufferedDynamicFlags flushing with concurrent drop/deletion

* make sure to drop before fs remove
2025-11-27 14:18:56 +01:00
Ivan Boldyrev
2a7fc718fa Fix search in empty HNSW segments (#7620)
* Add top==0 tests

* Fix HNSW scan top==0 error
2025-11-27 18:56:10 +07:00
Ivan Pleshkov
a2be9e7fff refactor sq score_bytes (#7613) 2025-11-27 10:49:33 +01:00
Luis Cossío
e0aabd6084 Weak flusher references to Gridstore components (#7624) 2025-11-26 17:01:54 -03:00
Tim Visée
6467931915 Add a user agent to HTTP clients (#7623)
* Add user agent to add HTTP clients

* Move user agent constant to defaults.rs
2025-11-26 18:59:21 +01:00
Roman Titov
5ba7ac8ee8 Qdrant Edge Python bindings improvements (#7561)
* Use anonymous lifetime in `FromPyObject` implementations

* Use `PyResult` in `IntoPyObject` implementations

* Cleanup imports and derives

* Cleanup `filter` conversions

* Add `PointVectors` getters

* Move `config` module into sub-directory

* Split `config` into sub-modules

* Simplify enum bindings

* Add zero-cost conversions for `PyVectorDataConfig` and `PySparseVectorDataConfig`

* Add getters to config structures

* fixup! Add getters to config structures

More zero-cost conversions for `PyVector*DataConfig`

* Implement `PyHnswIndexConfig`

* Implement `PyQuantizationConfig`

* fixup! Simplify enum bindings

* fixup! Implement `PyHnswIndexConfig`

* fixup! Implement `PyHnswIndexConfig`

* fixup! Implement `PyHnswIndexConfig`

* Implement `PySparseVectorDataConfig`

* fixup! Implement `PySparseVectorDataConfig`

* fixup! Implement `PySparseVectorDataConfig`
2025-11-26 18:47:17 +01:00
Tim Visée
a5f534b3c1 Change minimum version for batch WAL transfer into constant (#7619) 2025-11-26 16:59:05 +01:00
Tim Visée
57ad76db98 Disable RocksDB features in local development builds (#7552)
* Disable rocksdb compile time feature by default

* Also disable RocksDB feature in segment crate

* Enable RocksDB feature in all CI builds

* Remove extra job for testing non-RocksDB build, it's the default now

* Keep RocksDB structures in generated OpenAPI schema

* Fix obsolete --workspace flag breaking builds with explicit features

* Also build including RocksDB in e2e tests on CI
2025-11-25 17:29:50 +01:00
Tim Visée
b7394ce85e Bump rocksdb dependency to 0.24.0 (#7605) 2025-11-25 16:44:44 +01:00
Tim Visée
e630cf59fa Bump dev version to 1.16.2-dev (#7604) 2025-11-25 15:01:34 +01:00
Arnaud Gourlay
82929710fd Add timeout to cancel metrics and telemetry calls (#7579)
* Add timeout to cancel metrics and telemetry calls

* relax constraints

* Configure timeout default in OpenAPI schema

---------

Co-authored-by: timvisee <tim@visee.me>
2025-11-25 12:56:05 +01:00
dependabot[bot]
7f7d9981a2 build(deps): bump csv from 1.3.1 to 1.4.0 (#7594)
Bumps [csv](https://github.com/BurntSushi/rust-csv) from 1.3.1 to 1.4.0.
- [Commits](https://github.com/BurntSushi/rust-csv/compare/1.3.1...1.4.0)

---
updated-dependencies:
- dependency-name: csv
  dependency-version: 1.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 21:04:23 -03:00
Andrey Vasnetsov
1a92c6904a remove unused function (#7586) 2025-11-24 17:00:45 +01:00
Tim Visée
549f13fbeb Fix WAL handling on consensus snapshot (#7577)
* After clearing WAL, flush segment

* Add debug log when WAL is cleared

* Clear WAL on consensus snapshot after writing state, truncate on start

* Apply consensus snapshot offset

* Fix off by one error

* Tweak debug assertion message

* Change WAL reconciliation condition, and fully clear WAL in this case

* Add debug assertion to prove Raft index and snapshot index are equal

* Add documentation to resolve bot nit

* Return error on WAL clear failure

* Fix typo

* Remove unused truncate functions
2025-11-24 15:49:32 +01:00
Roman Titov
f85911d3ae Minor tweaks to WAL compaction logs (#7580) 2025-11-24 15:13:32 +01:00
Ivan Pleshkov
c737d9d087 P-Square one pass quantile estimation method (#7520)
* p square one pass method

* are you happy fmt

* fix n=9 case

* marker struct

* refactor

* proper tests

* add bench

* better namings

* are you happy clippy

* are you happy clippy

* fix additional markers order

* use ArrayVec instead of SmallVec

* use orderer float to sort f64

* Update lib/quantization/src/p_square.rs

Co-authored-by: xzfc <5121426+xzfc@users.noreply.github.com>

* Update lib/quantization/src/p_square.rs

Co-authored-by: xzfc <5121426+xzfc@users.noreply.github.com>

* mispelling

* review remarks

* fix typo

* change float checks order

---------

Co-authored-by: xzfc <5121426+xzfc@users.noreply.github.com>
2025-11-21 20:21:32 +03:00
Andrey Vasnetsov
59ee168dcd rename common -> qdrant_common to avoid name with other python packages (#7571) 2025-11-21 15:01:54 +01:00
Ivan Boldyrev
b5825c1245 Use batch searcher for sparse vector search (#7572)
It allows to remove `peek_*` methods from `FilteredScorer`, simplifying
code.
2025-11-21 20:29:24 +07:00
Arnaud Gourlay
9147ccdfce Fix: use the search runtime for prepare_query_context (#7575) 2025-11-20 16:00:50 +01:00
Arnaud Gourlay
50cf48b818 Fix use the update runtime for update operations (#7569)
* Fix use the update runtime for update operations

* Enable IO on update runtime

FAILED tests/consensus_tests/test_collection_recovery_limits.py::test_collection_recovery_reach_limit - Exception: HTTP request to http://127.0.0.1:33891/collections/test_collection/points?wait=true&ordering=weak failed with status code 500 after 5.20299s with response body:
{'status': {'error': 'Service internal error: task 240 panicked with message "A Tokio 1.x context was found, but IO is disabled. Call `enable_io` on the runtime builder to enable IO."'}, 'time': 3.28820663, 'usage': {'hardware': {'cpu': 0, 'payload_io_read': 0, 'payload_io_write': 70315, 'payload_index_io_read': 0, 'payload_index_io_write': 0, 'vector_io_read': 0, 'vector_io_write': 1649102}, 'inference': None}}
2025-11-20 12:33:39 +01:00
Andrey Vasnetsov
43f0c73bf2 fix default rescoring param choice for quantization rescoring (#7570) 2025-11-20 12:21:28 +01:00
Ivan Boldyrev
428f1e76d4 Batched scans for dense vectors (#7514)
* Batched iteration for plain `HNSWIndex` searches
* Batched iteration for `PlainVectorIndex` search
2025-11-20 17:34:02 +07:00
Andrey Vasnetsov
113e8aab54 await for consensus before unproxifying (#7558) 2025-11-19 14:14:49 +01:00
Tim Visée
84b2fb8793 Fix panic on startup with old storage, reenable old shard key format (#7564)
* Revert "Remove old shard key mapping format (#7047)"

This reverts commit 783c128c1a.

This reverts pull request <https://github.com/qdrant/qdrant/pull/7047>.

* Bump TODOs
2025-11-19 13:40:22 +01:00
Tim Visée
8bbeda5783 Add deferred flusher to Gridstore (#7446)
* Wrap the tracker and bitmask in Arc

* Implement deferred flusher for gridstore, defer tracker writes

* Remove clone

* Dynamically adjust list of pending updates to drain what is flushed

* Return proper flusher, defer premature Gridstore flushing errors

* Use deferred Gridstore flusher across storages

* Remove all Arc<RwLock<_>> wrappers around Gridstore in storages

* Flush pages inside closure, also wrap them in a lock

* Remove direct flush function from Gridstore

* Add test to assert behavior of deferred flushing in Gridstore

* Add much more extensive test, including concurrent flushes and deletes

* Add test for draining value pointer, make sure to drop when flushed

* Feature gate RocksDB components
2025-11-18 14:21:43 +01:00
Arnaud Gourlay
b784799b69 Missing validations for shard transfers (#7557)
* Missing validations for shard transfers

* some more

* fix test
2025-11-18 13:08:51 +01:00
Tim Visée
986a55a5e0 Adjust log warning about trying to read lock a segment (#7556)
* Fix log warning about trying to read lock a segment

* Fix typo

Co-authored-by: Roman Titov <ffuugoo@users.noreply.github.com>

---------

Co-authored-by: Roman Titov <ffuugoo@users.noreply.github.com>
2025-11-18 12:40:34 +01:00
Tim Visée
fca10199b4 Actively migrate away from RocksDB for vector/payload storage and index (#7551)
* Actively migrate away from RocksDB for vector/payload storage and index

* Update OpenAPI spec
2025-11-18 11:18:46 +01:00
Tim Visée
b687408230 Bump filter stream records minimum version to 1.16.0 (#7549) 2025-11-17 16:54:17 +01:00
Tim Visée
77cd5962c2 Bump dev version to v1.16.1-dev (#7548) 2025-11-17 15:45:10 +01:00
Andrey Vasnetsov
411223d7f7 avoid docstring comments for enum fields to make openapi nicer (#7538)
* avoid docstring comments for enum fields to make openapi nicer

* add more spaces
2025-11-14 20:31:33 +01:00
Andrey Vasnetsov
355cf3624c remove java_outer_classname (#7539) 2025-11-14 18:24:58 +01:00
Andrey Vasnetsov
4420165464 Implement ReplicatePoints in grpc (#7536)
* implement ReplicatePoints in grpc

* move filter into a separate file
2025-11-14 16:12:29 +01:00
Tim Visée
1b6e52554a Audit all spawn blocking calls, prematurely abort them (#7533)
* Prematurely abort blocking task in `spawn_cancel_on_drop` on drop

These tasks are intended to be cancellable. Now we prematurely abort the
task if the future was dropped before the task is executed.

* Prematurely abort blocking task in `spawn_cancel_on_token` on cancel

These tasks are intended to be cancellable. Now we prematurely abort the
task if the cancellation token is triggered before the task is executed.

* Prematurely abort blocking task for fetching telemetry

* Prematurely abort stoppable task on drop, all are safe to abort early

* Make `move_dir` either move everything, or nothing at all

That is with the exception of file IO errors in which case data may be
partially moved.

Before this PR it was possible for the new target directory to be
created without moving all data into it. Now we either do all, or
nothing.

* Prematurely abort task for creating full snapshot

It is fine to either create it, or not at all.

* Prematurely abort blocking task for waiting on consensus leader

* Prematurely abort blocking cardinality estimation and shard info tasks

* Prematurely abort blocking point deduplication task

* Prematurely abort blocking task for checking available disk space

* Prematurely abort blocking shard read operations

All shard read operations, such as retrieve, scroll, facets and more can
be safely aborted prematurely.

Related to: <https://github.com/qdrant/qdrant/pull/7530>

* Prematurely abort blocking task for waiting on replica state

* Prematurely abort blocking task for waiting on transfer replica states

* Prematurely abort blocking task for loading segment

This can safely be aborted before the task is started

* Prematurely abort blocking task waiting for replica states

* Prematurely abort blocking task for creating snapshot file

Safe because it aborts before writing any snapshot files to disk
2025-11-14 13:29:06 +01:00
Andrey Vasnetsov
ccabe47a08 more stop flags (#7531)
* add stopflag check into query_points of payload index

* propagate stopflag more

* fmt

* bench: compare better against no atomic

* use stoppable iter with IteratorExt

* clippy

* Add cancelled error helper

---------

Co-authored-by: Luis Cossío <luis.cossio@outlook.com>
Co-authored-by: timvisee <tim@visee.me>
2025-11-14 10:58:04 +01:00
Tim Visée
c86aa1a000 Abort pending blocking search tasks when we drop/invalidate the search (#7530)
* Cancel pending blocking search tasks when we drop/invalidate the search

* Mention PR with explanation in comment
2025-11-14 08:49:33 +01:00
Roman Titov
80ae57f0b3 Allow payload operations on dummy shard (#7521)
Co-authored-by: Tim Visée <tim+github@visee.me>
2025-11-13 18:31:41 +01:00
Andrey Vasnetsov
dee409b928 allow initial_state in API (#7528) 2025-11-13 14:12:07 +01:00
Arnaud Gourlay
204a27f3bc Fix missing version debug log (#7524)
* Fix missing version debug log

* we do not need curly braces where we are going
2025-11-12 17:18:44 +01:00
Arnaud Gourlay
b7da071199 Clarify multivector inline storage warning (#7523)
* Clarify multivector inline storage warning

* do what I actually wanted to do in first place

* fix test
2025-11-12 15:52:04 +01:00
Andrey Vasnetsov
e34a6e126e Mark legacy output vector fields deprecated (#7183)
* mark legacy output vector fields deprecated

* grpc docs

* Also mark legacy vector input fields as deprecated

---------

Co-authored-by: timvisee <tim@visee.me>
2025-11-12 15:21:54 +01:00