Commit Graph

3409 Commits

Author SHA1 Message Date
Kumar Shivendu
f00a69df4b Fix total count in replicate points progress tracker (#7857)
* Fix total count in replicate points progress tracker

* clippy
2026-01-06 00:57:25 +05:30
Andrey Vasnetsov
9c5cec1b87 restore snapshot in edge (#7852)
* Restore shard snapshot in Edge python bindings

* method to request snapshot manifest

* move snapshot manifest into Shard crate

* move shapshot manifest reading

* implement inplace update of the shard from snapshot

* fmt

* move shapshot-related functions again, into a dedicated struct

* fmt

* implement partial snapshot recovery for edge

* test for partial recoverying snapshot on edge
2026-01-05 19:33:30 +01:00
xzfc
f1ee3895b6 Safe delete (#7830)
* Replace `Option<Segment>` with `enum LoadSegmentOutcome`

* Replace some Path/PathBuf with str/String

* Rename field Segment::{current_path -> segment_path}

* safe_delete
2026-01-05 08:54:29 +00:00
tellet-q
c0b70f1eae Add a test for recovery after kill during Partial (#7762)
* Add a test for recovery after kill during Partial

* Address AI review

* simplify test

* Merge pull request #7829

* introduce a new state

* switch to ManualRecovery for user-initiated snapshot operations

* fmt

* fix test and regen api

* test fix: instead of force recovery on update failed snapshots now re…

---------

Co-authored-by: generall <andrey@vasnetsov.com>
2026-01-02 14:33:47 +01:00
Andrey Vasnetsov
dba26be155 Merge pull request #7835
* alt api key

* rm typo

* fix key length check logic

* differnt dirs for tests

* fix tests

* rm unused
2026-01-02 13:18:53 +01:00
dependabot[bot]
81102d18bd build(deps): bump object_store from 0.12.4 to 0.13.0 (#7841)
* build(deps): bump object_store from 0.12.4 to 0.13.0

Bumps [object_store](https://github.com/apache/arrow-rs-object-store) from 0.12.4 to 0.13.0.
- [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.12.4...v0.13.0)

---
updated-dependencies:
- dependency-name: object_store
  dependency-version: 0.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Add trait imports

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: timvisee <tim@visee.me>
2026-01-02 12:33:31 +01:00
dependabot[bot]
ff2ea35aca build(deps): bump arc-swap from 1.7.1 to 1.8.0 (#7847)
Bumps [arc-swap](https://github.com/vorner/arc-swap) from 1.7.1 to 1.8.0.
- [Changelog](https://github.com/vorner/arc-swap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vorner/arc-swap/compare/v1.7.1...v1.8.0)

---
updated-dependencies:
- dependency-name: arc-swap
  dependency-version: 1.8.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>
2026-01-02 11:36:59 +01:00
Roman Titov
d70ca93728 Add explicit SharedShardHolder type instead of LockedShardHolder type-alias (#7837) 2025-12-30 12:35:43 +01:00
Luis Cossío
b44596f477 allow collection-level jwt access (#7758) 2025-12-29 14:29:02 -06:00
Luis Cossío
5cd0fe3b5a filter collections during telemetry collection (#7757) 2025-12-29 09:39:23 -06:00
Luis Cossío
85a5b61b98 [cluster telemetry] Expose endpoint (#7729)
* expose cluster telemetry endpoint

* add endpoint to openapi

* add jwt test

* remove dead_code expectation

* fix consistency check

* fix jwt access test

* use response(reference(..)) in openapi
2025-12-29 09:37:38 -06:00
Luis Cossío
8ab86b6736 [cluster telemetry] Internal telemetry endpoint (#7672)
* move QdrantInternalService to its own file

* implement internal telemetry endpoint

cleaner diff on src/main.rs

upd response in proto

* use try_from conversion

* rename request/response in proto
2025-12-23 11:32:44 -06:00
Luis Cossío
64c806d8aa [cluster telemetry] Internal service conversions (#7631)
* implement conversions

* clippy

* rename `ReshardStage` -> `ReshardingStage`

* impl conversions to grpc

* upd response in proto

* convert TelemetryData

* add peer info

* upd openapi

* add conversion from TelemetryData to PeerTelemetry

* review nit

* re-style

* make `method` optional

* change comments to reference `ReshardingStreamRecords`

* missing nits
2025-12-23 11:00:25 -06:00
dependabot[bot]
d32849d154 build(deps): bump roaring from 0.11.2 to 0.11.3 (#7826)
Bumps [roaring](https://github.com/RoaringBitmap/roaring-rs) from 0.11.2 to 0.11.3.
- [Release notes](https://github.com/RoaringBitmap/roaring-rs/releases)
- [Commits](https://github.com/RoaringBitmap/roaring-rs/compare/v0.11.2...v0.11.3)

---
updated-dependencies:
- dependency-name: roaring
  dependency-version: 0.11.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>
2025-12-22 21:37:29 +01:00
Tim Visée
5ae5f65e18 Use RwLock in flushers, drop is alive lock early (#7811)
* Use RwLock for pending changes in MmapBitSliceBufferedUpdateWrapper

* Use RwLock for pending operations in DatabaseColumnScheduledDeleteWrapper

* Use RwLock for pending updates in DatabaseColumnScheduledUpdateWrapper

* Drop alive guard before reconciliation, we don't touch files after

* Remove redundant clone

* Update comments
2025-12-22 16:09:10 +01:00
Arnaud Gourlay
3f6aae9671 More segments lock timeout on read (#7802) 2025-12-19 13:23:52 +01:00
Tim Visée
9296874f9b Bump dev version to 1.16.4-dev (#7807) 2025-12-19 13:23:40 +01:00
Roman Titov
c8cf8f3559 Replace lazy_static with std::sync::LazyLock (#7808) 2025-12-19 13:22:00 +01:00
Tim Visée
e9818cab70 Fix reconciliation in more flushers (#7805)
* Reconcile BufferedDynamicFlags flusher

* Reconcile DatabaseColumnScheduledDeleteWrapper flusher

* Rename function for consistency
2025-12-19 12:14:29 +01:00
Tim Visée
ecf6554261 Switch to drain, it is simpler and recommended by docs (#7803) 2025-12-19 11:38:30 +01:00
Luis Cossío
c619cb233f Clone pending updates in buffered storages (#7801)
* in MmapSliceBufferedUpdateWrapper

* in MmapBitsliceBufferedUpdateWrapper

* in MutableIdTracker's versions updates

* in MutableIdTracker's mapping updates

* clone updates only when non-empty

* only lock for reconciling pending changes

* simpler reconciling

* use Mutex as argument to ensure we only lock within reconciliation
2025-12-18 12:15:16 -06:00
Tim Visée
2da336e192 Add some context to background flush error propagation (#7800) 2025-12-18 17:13:56 +01:00
Tim Visée
4a1103acb7 Revert "return an error when cancelling a flush (#7781)" (#7799)
This reverts commit 2f443ec055.
2025-12-18 16:45:30 +01:00
Kyamran
359c229cfe Replace --all to --workspace (#7797) 2025-12-18 14:44:56 +00:00
Ivan Pleshkov
c14f83eff9 use enum for SQ query and meta (#7669)
fix CI

review remarks

review remarks

review remarks

review remarks

simplify encoding of internal vector

fix ci

fix ci

review remarks

review remarks
2025-12-17 22:35:14 +01:00
Arnaud Gourlay
788f5e7fca SegmentSearcher times out on lock contention (#7755) 2025-12-17 16:54:15 +01:00
Roman Titov
3c2bf8b116 Fix CI 😬 (#7796) 2025-12-17 15:11:08 +01:00
Luis Cossío
2f443ec055 return an error when cancelling a flush (#7781)
* return an error when cancelling a flush

* fix test

* less verbosity
2025-12-17 10:21:20 -03:00
Roman Titov
8f7aa023db Qdrant Edge Python release CI workflow (#7562) 2025-12-17 14:19:26 +01:00
tellet-q
0ad86c71d4 Init snapshot metrics on collection creation (#7788) 2025-12-17 13:47:10 +01:00
Arnaud Gourlay
2e66577148 Gridstore noisy log into assert (#7795) 2025-12-17 13:46:44 +01:00
Tim Visée
019632332d Add test for broken WAL delta after stream records abort (#7787)
* Add test to reproduce broken WAL delta after aborting stream records

* Add staging env var to slow down stream records transfers for test

* Tweak test formatting and utilities a bit

* Add comment to test, link to PR describing bug

* Update test so it still succeeds with patched behavior

* Fix broken WAL delta after stream records abort (#7791)

* Make set_replica_state async

* Add function called when active state of local replica changes

* Add snapshot for newest clocks

* Bump newest clocks snapshot on replica deactivation

* Use newest clocks snapshot during recovery

* Add enum for specifying whether to take or clear clocks snapshot

* Store clock snapshot inside clock map, removing extra file

This greatly simplifies state handling. It also prevent any kind of
desynchronization because all newest clocks are always persisted
atomically.

* Immediately persist clocks after taking snapshot

* Always update snapshot, only take if missing

* Take clock snapshots through each shard flavor, including proxies

* Propagate dedicated functions for taking and clearing clocks snapshot

* Only persist clocks immediately if changed on snapshot/clear

* Simplify recovery point logic, always take clocks snapshot if exists

* Remove unwrap

* Fix typo

* Fix doc comment

* Transfer driver is async, use Tokio sleep

* Reduce visibility
2025-12-17 12:33:00 +01:00
Andrey Vasnetsov
a95587cb0c Fix unrelated transfer cancellation (#7792)
* easy fix with version check

* Link to PR

* Fix get transfers with source/target pairs, also fix dead replica aborts

* Use new source/target functions elsewhere

* Flip shard and peer arguments

* Fix incorrect check, from should be to

* Inline more format arguments

---------

Co-authored-by: timvisee <tim@visee.me>
2025-12-17 12:25:50 +01:00
Arnaud Gourlay
5175d9f64a Enrich Gridstore model testing (#7789)
* Enrich Gridstore model testing

* better

* no clear on Windows

* less windows

* sigh

* change strategy

* never give up

* x100 scale down for Windows

* last touch

* decrease for others too

* remove Iter test - the quadratic cost is not worth it

* Revert "remove Iter test - the quadratic cost is not worth it"

This reverts commit f0e98cb33b.

* try with limited Iter

* less logging as it is hurting crasher

* tracker.mapping_len() is slow

* hard limit good enough for now
2025-12-17 11:55:27 +01:00
xzfc
d093bd97ce Re-style .proto files (#7475)
* proto: doc comment style

* proto: clang-format

* proto: manually reflow some comments

* proto: proofread
2025-12-16 22:22:54 +00:00
xzfc
709a3b98a5 Optimization panic status cleanup (#7783) 2025-12-16 19:24:07 +00:00
xzfc
97fa802e10 Register trackers only after successfull start (#7766) 2025-12-16 19:38:55 +01:00
Luis Cossío
e1b38e1723 [feedback query] Rename to Naive strategy (#7756)
* Rename to `Naive` strategy. Remove generic `TStrategy`

* refactor in async_raw_scorer too

* review nit
2025-12-16 15:17:25 -03:00
Luis Cossío
a89f309645 new GridstoreError (#7780)
* create GridstoreError

* review nit
2025-12-16 12:04:25 -03:00
dependabot[bot]
260b68fbdb build(deps): bump ndarray from 0.16.1 to 0.17.1 (#7772)
* build(deps): bump ndarray from 0.16.1 to 0.17.1

Bumps [ndarray](https://github.com/rust-ndarray/ndarray) from 0.16.1 to 0.17.1.
- [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.16.1...0.17.1)

---
updated-dependencies:
- dependency-name: ndarray
  dependency-version: 0.17.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* bump ndarray-npy as well

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Arnaud Gourlay <arnaud.gourlay@gmail.com>
2025-12-16 15:28:36 +01:00
Arnaud Gourlay
c01813f668 Notify optimization handles to stop on shard drop (#7765) 2025-12-16 11:13:15 +01:00
Roman Titov
ed368f51fc Implement __repr__ for Qdrant Edge types (Part 3) (#7744) 2025-12-16 10:20:33 +01:00
dependabot[bot]
3dcd02af22 build(deps): bump derive_more from 2.0.1 to 2.1.0 (#7776)
Bumps [derive_more](https://github.com/JelteF/derive_more) from 2.0.1 to 2.1.0.
- [Release notes](https://github.com/JelteF/derive_more/releases)
- [Changelog](https://github.com/JelteF/derive_more/blob/master/CHANGELOG.md)
- [Commits](https://github.com/JelteF/derive_more/compare/v2.0.1...v2.1.0)

---
updated-dependencies:
- dependency-name: derive_more
  dependency-version: 2.1.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-12-16 09:13:37 +01:00
dependabot[bot]
34df3ff720 build(deps): bump geo from 0.31.0 to 0.32.0 (#7770)
Bumps [geo](https://github.com/georust/geo) from 0.31.0 to 0.32.0.
- [Changelog](https://github.com/georust/geo/blob/main/CHANGES.md)
- [Commits](https://github.com/georust/geo/compare/geo-0.31.0...geo-v0.32.0)

---
updated-dependencies:
- dependency-name: geo
  dependency-version: 0.32.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-12-16 08:06:52 +01:00
Roman Titov
8764454837 Implement __repr__ for Qdrant Edge types (Part 2) (#7742)
* Implement `__repr__` for `PyJsonPath`

* Implement `__repr__` for `PyFilter`

* Implement `__repr__` for `PyQuery`

* Implement `__repr__` for `PyQueryRequest`

* Implement `__repr__` for `PySearchRequest`

* Implement `__repr__` for `PyFilter` using `pyclass_repr` attribute

* Implement `__repr__` for `PyQuery` using `pyclass_repr` attribute

* Implement `__repr__` for `PyQueryRequest` using `pyclass_repr` attribute

* Implement `__repr__` for `PySearchRequest` using `pyclass_repr` attribute
2025-12-16 03:27:57 +01:00
Roman Titov
1bf968bd10 Implement __repr__ for Qdrant Edge types (#7695)
* Refactor `PyUpdateOperation` constructors

* Add default parameters to `PyVectorDataConfig::new`

* Add `Repr` trait and `WriteExt` helper

* Implement `__repr__` for config types

* fixup! Implement `__repr__` for config types

Use `Copy` instead of `Clone`

* fixup! Implement `__repr__` for config types

Add basic test

* Implement `__repr__` for `PyPointId`

* Implement `__repr__` for `PyVector`

* Implement `__repr__` for `PyVectorInternal`

* Implement `__repr__` for `PyPayload`

* Implement `__repr__` for `PyValue`

* Implement `__repr__` for `PyPoint`

* Implement `__repr__` for `PyPointVectors`

* Implement `__repr__` for `PyRecord`

* Move `PyScoredPoint` into a separate file

* Implement `__repr__` for `PyScoredPoint`

* Cleanup examples

* fixup! Implement `__repr__` for `PyScoredPoint`

* Move `PyOrderValue` into separate file

* Add `PyScoredPoint::order_value`

* Implement `pyclass_repr` proc-macro attribute

* Implement `__repr__` for config types using `pyclass_repr` attribute

* Implement `__repr__` for `PySparseVector` using `pyclass_repr` attribute

* Implement `__repr__` for `PyPoint` using `pyclass_repr` attribute

* Implement `__repr__` for `PyPointVectors` using `pyclass_repr` attribute

* Implement `__repr__` for `PyRecord` using `pyclass_repr` attribute

* Implement `__repr__` for `PyScoredPoint` using `pyclass_repr` attribute

* Minor fixes and cleanups

* fixup! Minor fixes and cleanups

* rollback copy for quantization config

* rollback copy for quantization config

---------

Co-authored-by: generall <andrey@vasnetsov.com>
2025-12-16 02:17:37 +01:00
Luis Cossío
4e91702fe8 Introduce IsAliveLock (#7751)
* introduce IsAliveLock

* add tests

* rename to mark_dead

* update gridstore comment

* Update some comments

* Add must_use attribute to lock_if_alive

* Rename mark_dead to blocking_mark_dead

* make the handle take a `Weak` reference

* make dropping explicit

* use `Mutex::lock_arc` instead

* less nesting

* clippy

---------

Co-authored-by: timvisee <tim@visee.me>
2025-12-15 12:22:30 -03:00
Arnaud Gourlay
9d3fb28862 Cleanup shard level search timeout (#7754) 2025-12-15 11:27:08 +01:00
Andrey Vasnetsov
9401f15684 use urlencode to prevent breaking collection name with % in it (#7759)
* use urlencode to prevent breaking collection name with % in it

* do the same for snapshot_description.name
2025-12-14 12:50:31 +01:00
Tim Visée
aadadd172e Gridstore: split pointer updates set/unset, simplify draining (#7749)
* Separate set and unset lists for each Gridstore pointer update

This makes the list of pointer updates much easier to grasp. The
simplification is desired because this exact structure has been a cause
for bugs multiple times now.

* Add more aggressive debug assertions

* Use consistent terminology

* Correct removal of set

* Simplify drain function

* Add safe guard to ignore empty pointer updates

* Rework tracker getter, explicitly branch variants

* Patch transmute, require Sized type

* rename and adjust comments

- set/unset is now current/to_free
- adjusted descriptions and comments for this nomenclature too

* clippy

* clippyyy

not 4, not 2, but 3 spaces

---------

Co-authored-by: Luis Cossío <luis.cossio@outlook.com>
2025-12-11 18:07:15 +01:00