Tim Visée
168f2fc625
Hotfix: fix search aggregator error with limit 0 ( #7972 )
...
* Hotfix: fix search aggregator error with limit 0
* Don't handle points if limit is zero
2026-01-23 10:15:06 +01:00
Lior.Chen
88567f2b45
fix: replica state peer id remap ( #7969 )
2026-01-22 19:20:35 +01:00
krapcys1-maker
55352a5933
fix: improve datetime_range RFC3339 parse error ( #7919 )
...
* fix: improve REST datetime_range RFC3339 error message
* docs: add docstrings for datetime_range parsing
* fix: avoid serde_json intermediary for non-human-readable deserialization
* fix: avoid serde_json intermediary for non-human-readable range deserialization
* refactor(segment): reduce Condition JSON routing boilerplate
* fix(segment): preserve binary datetime deserialization compatibility
* fix(segment): preserve binary datetime deserialization
* test(segment): add datetime deserialization regression tests
* chore: rerun CI
* chore: rerun CI (2)
* refactor(segment): simplify datetime deserialization
2026-01-22 09:55:05 +01:00
xzfc
95fffe8a12
Sync LocalShard::optimizers ( #7962 )
2026-01-21 21:11:30 +00:00
xzfc
92b8913084
Enforce segment UUIDs ( #7958 )
...
* Swap docstrings for segment_ids/segment_uuids
Terse internal docs, detailed user-facing docs, not vice versa.
* Enforce segment UUIDs
* Export upcoming segment UUID to telemetry
* Add `optimize_for_test` wrapper
* Tune log message
Reason: the UUID is now guaranteed.
* Improve argument naming/docs
2026-01-21 15:43:32 +00:00
Kumar Shivendu
07a6aac584
Allow partial snapshots even when no local shard exists ( #7959 )
...
* Allow partial snapshots even when no local shard exists
* Avoid checking for empty old manifest
* Handle CollectionError::NotFound and throw error for others
* fmt
* remove comment
* Cleaner error handling
* Simplify code
* Minor fix
2026-01-21 19:49:51 +05:30
Tim Visée
692bc76f97
Fix optimizer error if segment is already under optimization ( #7960 )
2026-01-21 14:57:57 +01:00
Luis Cossío
9fca971d93
More graceful handle of flush cancellation ( #7798 )
...
* Reapply "return an error when cancelling a flush (#7781 )" (#7799 )
This reverts commit 4a1103acb7 .
* log::trace cancellation of components
* gracefully handle flush cancellation inside segment flusher
* Update lib/segment/src/segment/entry.rs
Co-authored-by: Tim Visée <tim+github@visee.me >
* don't wrap cancellation errors
---------
Co-authored-by: Tim Visée <tim+github@visee.me >
2026-01-21 10:06:50 -03:00
Arnaud Gourlay
d6afde3d5e
Remove unecessary flag in OperationData ( #7957 )
2026-01-21 13:05:41 +01:00
Roman Titov
7bc947cef3
Always Copy-on-Write when updating payload in immutable segments ( #7952 )
2026-01-21 11:09:17 +01:00
Andrey Vasnetsov
25252aba37
Generate *.pyi files for EDGE ( #7943 )
...
* generate pui files for edge functions
* fix stup for `lambda_`
2026-01-20 18:28:40 +01:00
Luis Cossío
3cc1a8b4dc
move cfg statements ( #7954 )
2026-01-20 14:14:23 -03:00
Tim Visée
6857e7d42e
Fix integer overflow in query batch when using high limits ( #7950 )
2026-01-20 15:10:48 +01:00
Kumar Shivendu
9d71b021ab
Expose segment UUIDs in telemetry response ( #7735 )
...
* Add segment ID in telemetry response
* Migrate optimization log segment IDS to use UUIDs
* fmt
* clippy
* Bring back proxy segment SegmentEntry impl
* update openapi spec
* Bring back segment ID
* update comment
* Precompute segment uuid from filesyste while creating segment
* Update return types
* Update OpenAPI spec
* remove segment_ prefix from uuid field and use inline block
* Update OpenAPI spec
* Trigger CI
* clippy
* Improve comments to differentiate between segment id and uuid
* Remove duplicate function that shadowed segment entry function
---------
Co-authored-by: timvisee <tim@visee.me >
2026-01-20 13:59:22 +01:00
Andrey Vasnetsov
438a9c5d87
rollback experimental fix ( #7948 )
2026-01-20 12:32:30 +01:00
dependabot[bot]
7cd33e5288
build(deps): bump url from 2.5.7 to 2.5.8 ( #7936 )
...
Bumps [url](https://github.com/servo/rust-url ) from 2.5.7 to 2.5.8.
- [Release notes](https://github.com/servo/rust-url/releases )
- [Commits](https://github.com/servo/rust-url/compare/v2.5.7...v2.5.8 )
---
updated-dependencies:
- dependency-name: url
dependency-version: 2.5.8
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-20 11:29:07 +01:00
dependabot[bot]
4370fbee22
build(deps): bump bitpacking from 0.9.2 to 0.9.3 ( #7935 )
...
Bumps [bitpacking](https://github.com/quickwit-oss/bitpacking ) from 0.9.2 to 0.9.3.
- [Release notes](https://github.com/quickwit-oss/bitpacking/releases )
- [Changelog](https://github.com/quickwit-oss/bitpacking/blob/master/CHANGELOG.md )
- [Commits](https://github.com/quickwit-oss/bitpacking/commits )
---
updated-dependencies:
- dependency-name: bitpacking
dependency-version: 0.9.3
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-20 11:29:03 +01:00
dependabot[bot]
b8a4ba16c3
build(deps): bump object_store from 0.13.0 to 0.13.1 ( #7934 )
...
Bumps [object_store](https://github.com/apache/arrow-rs-object-store ) from 0.13.0 to 0.13.1.
- [Changelog](https://github.com/apache/arrow-rs-object-store/blob/main/CHANGELOG-old.md )
- [Commits](https://github.com/apache/arrow-rs-object-store/compare/v0.13.0...v0.13.1 )
---
updated-dependencies:
- dependency-name: object_store
dependency-version: 0.13.1
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-20 11:27:29 +01:00
xzfc
e5dd8488f1
GET /optimizations: re-plan on each request ( #7945 )
2026-01-20 11:07:35 +01:00
Andrey Vasnetsov
21deeec9ec
async scroll ( #7928 )
...
* implementation of async batch vectors reading
* EXPERIMENT: async-io for reading on scroll
* disable on non-linux
* make retrieve sequential for test
* wip: implement vector reading via callback
* simplify operations, remove duplicates
* use batch retrieve also for post-processing search results
* clippy
* fix tests
* review fixes
* Replace big match statement with simple option filter and equal check
* Inline format arguments
---------
Co-authored-by: timvisee <tim@visee.me >
2026-01-19 18:43:40 +01:00
Andrey Vasnetsov
d9393acac6
simplify edge config ( #7933 )
...
* simplify edge config
* Accept default vector config or explicit vector config map when creating `EdgeConfig`
* fixup! Accept default vector config or explicit vector config map when creating `EdgeConfig`
Update examples
* upd tests
* bump edge version to v0.5.0
---------
Co-authored-by: Roman Titov <ffuugoo@users.noreply.github.com >
2026-01-19 18:32:11 +01:00
Andrey Vasnetsov
a2550eb938
do not generate new ids if not needed ( #7932 )
2026-01-19 16:12:33 +01:00
Luis Cossío
b4c9df1f3f
[cluster telemetry] Include shards information ( #7886 )
...
* make some existing fields optional
particularly, RemoteShardTelemetry's `searches` and `updates`, and
LocalShardTelemetry's `optimizations`
* Include shards information in cluster telemetry
* upd openapi
* nits
* only include partial snapshot info if non-empty
* fixes
2026-01-19 11:34:37 -03:00
Arnaud Gourlay
7739b2c4b6
Optimize SegmentBuilder update with proper Vec sizing ( #7921 )
2026-01-19 15:24:04 +01:00
Andrey Vasnetsov
b94a13fd6c
implement a new configuration for read fan-out delay ( #7929 )
...
* implement a new configuration for read fan-out delay
* upd schema
* Update read_fan_out_delay_ms comment
---------
Co-authored-by: timvisee <tim@visee.me >
2026-01-19 14:38:54 +01:00
Arnaud Gourlay
c548566e56
Optimize allocation in max_available_vectors_size_in_bytes ( #7924 )
2026-01-19 12:43:04 +01:00
Roman Titov
a9865fbed2
Update qdrant-edge-py version to 0.4.0 ( #7926 )
...
* Update `qdrant-edge-py` version to 0.4.0
* fixup! Update `qdrant-edge-py` version to 0.4.0
🙄 🙄 🙄
2026-01-16 23:27:03 +01:00
Roman Titov
1c295ebfe2
Rename edge::Shard into edge::EdgeShard ( #7925 )
2026-01-16 17:22:23 +01:00
Andrey Vasnetsov
28215e6125
Validate vector name in matrix request ( #7923 )
...
* validate `using` param
* fix slop
2026-01-16 12:20:40 +01:00
xzfc
76944fbb6e
Expose planned optimizations in API ( #7784 )
...
* Expose pending optimizations in API
* Address review comments
2026-01-15 21:31:31 +00:00
Roman Titov
e733e4204c
Flush edge::Shard on Drop ( #7911 )
...
And add explicit `flush` and `close` methods
2026-01-15 10:55:33 +01:00
Andrey Vasnetsov
921b1ce83d
Prevent unoptimized updates ( #7643 )
...
* wip: wait for optimization before applying update
* implement api parameter
* nits
* fix deadloack when no optimizers are running
* release handle mutex
* Derive PartialEq
* Remove unused function
* fix missing kb conversion in threshold
* Update lib/api/src/grpc/proto/collections.proto
Co-authored-by: Tim Visée <tim+github@visee.me >
* sync comment change
---------
Co-authored-by: Arnaud Gourlay <arnaud.gourlay@gmail.com >
Co-authored-by: timvisee <tim@visee.me >
Co-authored-by: Tim Visée <tim+github@visee.me >
2026-01-14 16:37:03 +01:00
Ivan Pleshkov
ec3ef1cb67
Use p square to find ranges ( #7733 )
...
* use p square to find ranges
* use sample size
* add stopper checks
* review remarks
* review remarks
2026-01-14 08:51:08 +01:00
xzfc
a4ca865f33
OptimizationPlanner ( #7752 )
...
* refactor(SegmentHolder::iter): use SegmentId, not &SegmentId
* refactor(SegmentHolder): Add SegmentHolder::iter_original
* refactor: inline *Optimizer::worst_segment() into SegmentOptimizer::check_condition
* refactor(ConfigMismatchOptimizer): extract config_mismatch function
* Fix comments
* refactor: consistent variable naming
It's `segment_id`/`_segment_id`, not `idx`/`sid`/`x.0`/`_`.
* refactor(IndexingOptimizer): extract large chunks of logic
* refactor(SegmentOptimizer): simplify unwrap_proxy/handle_cancellation
* SegmentHolder: add running_optimizations counter
* OptimizationPlanner
* MergeOptimizer: allow merging two segments, update doc
2026-01-13 12:09:40 +00:00
dependabot[bot]
ce6f6fbd42
build(deps): bump flate2 from 1.1.5 to 1.1.8 ( #7905 )
...
Bumps [flate2](https://github.com/rust-lang/flate2-rs ) from 1.1.5 to 1.1.8.
- [Release notes](https://github.com/rust-lang/flate2-rs/releases )
- [Commits](https://github.com/rust-lang/flate2-rs/compare/1.1.5...1.1.8 )
---
updated-dependencies:
- dependency-name: flate2
dependency-version: 1.1.8
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-13 11:38:45 +01:00
Andrey Vasnetsov
dc3dfcbbe0
bump edge version to 0.2.0
2026-01-13 09:41:47 +01:00
dependabot[bot]
3521cd5b9a
build(deps): bump ndarray from 0.17.1 to 0.17.2 ( #7906 )
...
Bumps [ndarray](https://github.com/rust-ndarray/ndarray ) from 0.17.1 to 0.17.2.
- [Release notes](https://github.com/rust-ndarray/ndarray/releases )
- [Changelog](https://github.com/rust-ndarray/ndarray/blob/master/RELEASES.md )
- [Commits](https://github.com/rust-ndarray/ndarray/compare/0.17.1...0.17.2 )
---
updated-dependencies:
- dependency-name: ndarray
dependency-version: 0.17.2
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-13 09:37:04 +01:00
Roman Titov
9940a4b272
Implement info request for Qdrant Edge ( #7890 )
...
* Implement `edge::Shard::info`
* Add `ReprStr` marker-trait
* Add Python bindings for payload index types
* Implement `PyShard::info`
* fixup! Add Python bindings for payload index types
Add `enable_hnsw` fields
* add __repr__ and exted tests
---------
Co-authored-by: Andrey Vasnetsov <andrey@vasnetsov.com >
2026-01-13 09:30:29 +01:00
Andrey Vasnetsov
a2e31318e0
Add pyo3 signature annotations with default values for all Py* structs ( #7891 )
...
* Add pyo3 signature annotations with default values for all Py* structs
- Added #[pyo3(signature = (...))] attributes to all Py* structs with optional parameters
- Ensured non-default parameters come before parameters with defaults
- Follows the pattern established in PyScrollRequest
- Updated structs: PySearchRequest, PySearchParams, PyQuantizationSearchParams,
PyAcornSearchParams, PyQueryRequest, PyPrefetch, PyOrderBy, PyMmr, PyPoint,
PyFormula, PyShard::load, PySparseVectorDataConfig, PySparseIndexConfig
* fix params ordering
2026-01-12 22:55:17 +01:00
Andrey Vasnetsov
aa8740ff23
disposable hygienics ( #7893 )
...
* no not overuse HwMeasurementAcc::disposable everywhere, for better code navigation
* fmt
2026-01-12 22:54:25 +01:00
tellet-q
34daa19ed5
Move TestDelay to CollectionUpdateOperations and add generic staging API ( #7716 )
...
* Move TestDelay to CollectionUpdateOperations
* Address ai review
* Modify endpoint's path
* Address review
2026-01-12 11:40:22 +01:00
Andrey Vasnetsov
a7cdfd27d5
log mutable id tracker mapping updates ( #7894 )
...
* add log for persisting id-tracker changes
* trace log flush topology
* fmt
* make trace
2026-01-11 23:58:45 +01:00
Roman Titov
fb9d36e913
Implement scroll and count requests for Qdrant Edge ( #7880 )
...
* Cleanup `shard` crate module declarations
* Move `ScrollRequestInternal` into `shard` crate
* fixup! Move `ScrollRequestInternal` into `shard` crate
Fix imports
* fixup! Move `ScrollRequestInternal` into `shard` crate
`const fn default_*`
* Implement `edge::Shard::scroll`
* fixup! Implement `edge::Shard::scroll`
Re-export `OrderByInterface`
* Cleanup `edge` module declarations
* Cleanup `qdrant-edge-py` module declarations
* Move `PyWithPayload` and `PyWithVector` into `types::query`
* Add `PyScrollRequest` type
* Implement `PyShard::scroll`
* Move `CountRequestInternal` into `shard` crate
* fixup! Move `CountRequestInternal` into `shard` crate
Fix imports
* fixup! Move `CountRequestInternal` into `shard` crate
Rename `default_exact_count` into `CountRequestInternal::default_exact`
* Implement `edge::Shard::count`
* Implement `PyShard::count`
* review: offset for scroll, default values, examples
* ai review
---------
Co-authored-by: generall <andrey@vasnetsov.com >
2026-01-10 12:20:30 +01:00
Arnaud Gourlay
6966a84168
Improve logs regarding cleanup on startup ( #7885 )
2026-01-09 12:04:15 +01:00
Sapphire
a494452524
Add enable_hnsw option for payload field schema ( #7887 )
...
* feat: Add enable_hnsw option for payload field indexes
Add optional enable_hnsw parameter to all payload index types to control
whether additional HNSW graph links are built for each indexed field.
- Add enable_hnsw field to all 8 payload index param types
- Update gRPC proto definitions and conversions
- Update OpenAPI schema
- Modify HNSW graph builder to respect enable_hnsw flag
- Add enable_hnsw() helper methods to PayloadSchemaParams and PayloadFieldSchema
- Update all tests to include new field (default: None)
When enable_hnsw is true and payload_M > 0, additional HNSW links will
be built for the payload field. Default value is true for backward compatibility.
* Fix Some format problems
* fix: address comment problem
---------
Co-authored-by: EC2 Default User <ec2-user@ip-10-78-171-148.ec2.internal >
2026-01-09 11:39:44 +01:00
Ivan Pleshkov
ec4b98bcc8
id tracker persisted mappings offset ( #7877 )
...
* id tracker persisted mappings offset
* remove obsolete check
* review remarks
* review remarks
* When persisting mappings, truncate file that is larger than we expect
* If persisting mappings fails, truncate file to what we had before
This isn't necessary, but it is nice to clean up partial mappings.
* Fix typos
* Fix typos
* Just truncate the file, we don't have to seek anymore
* Rename length variable to mappings_expected_len
---------
Co-authored-by: timvisee <tim@visee.me >
2026-01-09 11:38:20 +01:00
xzfc
38e620ffd7
Put unreliable unsafe block behind "testing" feature flag ( #7884 )
2026-01-09 10:41:30 +01:00
Daniel Boros
1cbf297f9e
feat/shard-ops-timeout ( #7750 )
...
* feat: add shard-ops timeout
* feat: add shard-ops timeout
* feat: add missing timeout
* fix: format
* fix: type serialization
* fix: bad wal flush logic
* feat: add seperate wait_time
* fix: linter issues
* fix: linter
* chore: make select more readable
* fix: linter issues
* chore: remove comment
* chore: adjust comment
* chore: update definition
* chore: remove extra wait_timeout -> make timeout global
* chore: remove wait_timeout from point_ops
* chore: remove wait_timeout from grpc
* refactor: make shard_ops more readable
* chore: remove timeout from update_all
* feat: propagate wait_timeout error
* fix: clippy recommendation
* chore: update wait timeout
* refactor: update merge_successful_update_results
* fix: tests inconsistency
* fix: revert global ord, partialord for UpdateStatus
* fix: integration test
* fix: res ingoring
* fix: review requests
* fix: clippy
* chore: revert back futures unordered
* fix: resolve response status
* force timeout for remote operations
* fix: pr reviews
* fix: switch to duration
* Bump OpenAPI spec
* feat: add serde_as
* fix: timeout statu condition
* Minor tweaks
* Use tokio timeout directly rather than deadline
* Revert schema generator permissions
* Remove obsolete semi-colon
---------
Co-authored-by: generall <andrey@vasnetsov.com >
Co-authored-by: timvisee <tim@visee.me >
2026-01-09 10:24:45 +01:00
Luis Cossío
7dbb994f6f
[cluster telemetry] Include peers versions ( #7848 )
...
* wrap details in another struct, less Options
* include version in peers info
* update openapi
* include app telemetry in internal service
* move debug assertion after check
2026-01-08 14:35:31 -03:00
xzfc
65141c9a2c
Use syncfs ( #7883 )
...
* Remove call to Archive::set_sync
Also, this method was the last remaining part of our `tar-rs` fork,
so we can switch to the upstream version now.
* Do syncfs
2026-01-08 15:07:52 +00:00