Commit Graph
101 Commits
Author SHA1 Message Date
Jojii 9ab1fcabc8 Fix config path & Webui Assets in Debian package (#6958)
* Fix debian config location & WebUI assets

* remove config overwrite env variable again
2025-08-11 13:15:52 +02:00
Tim Visée d6844b7f65 Deprecations for Qdrant 1.15.0 (#6892)
* Deprecate init_from

* Mark memmap_threshold as deprecated

* Mark locks API as deprecated

* Mark RBAC collection access payload filter as deprecated

* Allow deprecations in tests and benchmarks
2025-07-17 16:12:57 +02:00
Andrey Vasnetsov 40cdaeaa5a Adjust default values for better performance (#6844)
* adjsut default values for better performance

* upd openapi
2025-07-17 13:54:50 +02:00
Andrey Vasnetsov 7d2fbb0d4c remove max indexing threads from config (#6760)
* remove max_optimization_threads from config.yaml

* fmt
2025-07-17 13:29:24 +02:00
Andrey Vasnetsovandtimvisee 3501e4b7fe Add setting to limit max number of collections (#6548)
* add setting to limit max number of colelctions

* upd openapi

* Add max_collections to config

---------

Co-authored-by: timvisee <tim@visee.me>
2025-05-22 23:21:00 +02:00
Tim Visée bdd1bf14b5 Mark hardware reporting feature as experimental in the configuration (#6258) 2025-03-31 16:20:31 +02:00
Tim Visée 4182614595 Add all feature flag, report enabled flags on start (#6228)
* Add magic all flag, if set all features will be enabled

* Report enabled feature flags on start, if any is enabled

* Remove pub visibility from all, add comment it's only applied on init

* Don't check all flag in is_empty
2025-03-31 16:19:16 +02:00
Tim Visée 126d4f839a Add feature flag to skip RocksDB in immutable payload indices (#6226) 2025-03-31 16:18:02 +02:00
Tim Visée 6af9fccf81 Fix snapshot restore with new shard key format (#6202)
* Use new shard key storage wrapper type when recovering snapshot

* Fix compiler warning
2025-03-21 11:46:28 +01:00
Tim Visée abf433e6c0 Mutable ID tracker integration (#6174)
* Rename mutable ID tracker mappings file

* Make new ID tracker the default, add new variant for RocksDB tracker

* In mutable ID tracker, only list files if they exist on disk

* Don't use the new mutable ID tracker yet

* Feature flag usage of new mutable ID tracker

* Simplify RocksDB check a bit

* Rename both the mutable ID tracker files
2025-03-21 11:46:14 +01:00
Tim ViséeandJojii 01be51e251 Add global feature flags (#6194)
* Add global feature flags structure, load on start

* Feature flag use of new shard key format

* Enable feature flag for new shard key format by default in dev builds

* Prevent unwrapping everywhere; Single place for initialization (#6198)

* Disable shard key feature flag by default for now, it causes problems

---------

Co-authored-by: Jojii <15957865+JojiiOfficial@users.noreply.github.com>
2025-03-21 11:46:08 +01:00
Tim Visée 6cc3ecbc30 Enable consensus compaction by default (#5903)
* Enable consensus compaction by default

* Also set new compaction default in code
2025-02-11 14:41:05 +01:00
Tim Visée 0ca44678fb Add default log format properties to configuration file (#5942) 2025-02-11 14:41:02 +01:00
Roman Titov 2191b792d4 Add resharding_enabled option to ClusterConfig (#5770)
* Add `resharding_enabled` option to `ClusterConfig`

If `resharding_enabled` is *not* set, `StartResharding` API returns an error

* Enable `resharding_enabled` option in development config

* fixup! Add `resharding_enabled` option to `ClusterConfig`

Fix tests

* fixup! Enable `resharding_enabled` option in development config

😅

* fixup! Enable `resharding_enabled` option in development config

🙄🙄🙄
2025-01-16 10:51:51 +01:00
Tim Visée 0ad13cb056 Update config descriptions (#5684) 2025-01-08 14:08:47 +01:00
Andrey VasnetsovandTim Visée 7b0911961c Explict configuration for deb package build (#5630)
* explicit configuration of deb package

* use special build feature

* Review suggestions

---------

Co-authored-by: Tim Visée <tim+github@visee.me>
2025-01-08 14:03:45 +01:00
Luis Cossío 21ba00d284 Transfer blob_store into this repo (#5436)
* copy-paste blob_storage

* get rid of copied utils

* fix clippy

* fmt

* audit blob_store manifest

* move `Payload` into `fixtures.rs`

* fix clippy

* put csv in google storage

* ignore hm test

* fix codespell

* improve files test

* test different block sizes

* remove unused deps

* replace StdRng with SmallRng for faster tests
2024-12-09 10:45:43 +01:00
Luis Cossío 719f4f4094 Make default_on_disk_payload consistent with config file (#5396)
* make the default `on_disk_payload` match the default config value

* remove duplicate impl, update docstrings

* change default `PayloadStorageType` too

* gen openapi
2024-11-12 14:39:25 +01:00
Jojiiandgenerall cc807cbfbc Add hardware measurements in API (#5306)
* add HwMeasurementAcc and API helpers+types

* add config to API to toggle hardware reporting in API responses

* add Default impl for HwMeasurementAcc

* comments

* review remarks

* include usage into API schema

---------

Co-authored-by: generall <andrey@vasnetsov.com>
2024-11-08 11:19:25 +01:00
n0x29aandn0x29a 62380a742a Inference Service, billing-id (#5287)
* Inference Service, token

---------

Co-authored-by: n0x29a <n0x29a@example.com>
2024-11-08 11:11:36 +01:00
cf8f22fbe7 Inference Service Integration (#5240)
* Inference Service Integration

* Update src/common/inference/service.rs

Co-authored-by: Andrey Vasnetsov <andrey@vasnetsov.com>

* Inference Service Integration

* review fixes

---------

Co-authored-by: n0x29a <n0x29a@example.com>
Co-authored-by: Andrey Vasnetsov <andrey@vasnetsov.com>
2024-11-08 11:06:55 +01:00
Jojii 0b236d8107 [Strict mode] default config (#5037)
* add default config for strict mode

* add default values as example to config/config.yaml

* improve implementation

* update grpc docs
2024-10-08 13:09:56 +02:00
Justin MillerandTim Visée 76ecdb25e7 Adding logging to disk note to config.yaml. (#5041)
* Adding logging to disk note to config.yaml.

* Update config/config.yaml

Co-authored-by: Tim Visée <tim+github@visee.me>

---------

Co-authored-by: Tim Visée <tim+github@visee.me>
2024-09-17 15:28:26 +02:00
David MyrielandTim Visée cd1305e68a update config.yaml (#4710)
* update config.yaml

* Update config/config.yaml

Co-authored-by: Tim Visée <tim+github@visee.me>

---------

Co-authored-by: Tim Visée <tim+github@visee.me>
2024-08-09 18:10:32 +02:00
Jojii f7a7e6ff12 Add optimizer_overwrite config option (#4317)
* add config option

* add optimizers_config to optimizer calls

* also add for tests

* add to build_optimizers

* rename function parameter
2024-06-11 13:14:11 +02:00
Jojii 2338349e89 Add config option shard_nr_per_node (#4309) 2024-06-11 13:13:35 +02:00
Jojiiandgenerall e019a85f3f Add vectors and quantization options and defaults (#4299)
* add vectors and quantization options and defaults

* remove default quantization settings and add config options for consensus

* change config structure

* change parameter hierarchy

* apply new config values

* review changes

---------

Co-authored-by: generall <andrey@vasnetsov.com>
2024-05-26 12:52:36 +02:00
Kenshin Tanaka 22c3ee286e Implement S3 snapshot manager (#4150)
* Add SnapshotsStorageConfig enum(Local or S3) and deserialize implementation

* [refactor]  use snapshots_config instead of s3_config

* update config

* add AWS official`aws-sdk-s3`

* implement store_file() WITHOUT error handling

* implement list_snapshots

* implement delete_snapshot

* run `cargo +nightly fmt`

* delete println

* implement get_stored_file

* Add error handlings

* Refactor AWS S3 configuration and error handling

* fix bugs

* create an empty test file

* fix `alias_test.rs` for StorageConfig type

* tempolary delete some test and try s3 test

* Update integration-tests.yml to use snap instead of apt-get for installing yq

* Update integration-tests.yml to use sudo when installing yq

* add sudo

* make (full/non-full) snapshots downloadable

* debug

* small fix

* Add S3 endpoint URL configuration option

* fix

* fix

* debug

* fix endpoint

* update to http://127.0.0.1:9000/

* update

* fix

* fix `#[get("/collections/{collection}/shards/{shard}/snapshots/{snapshot}")]` for s3

* put original tests back

* refactor

* small fix (delete println & echo)

* use object_store and refactor

* create snapshot_storage_ops and implement

* Refactor get_appropriate_chunk_size function to adjust chunk size based on service limits and file size

* cargo +nightly fmt --all

* make it more abstract

* Refactor SnapshotsStorageConfig deserialization in SnapShotsConfig

* small update

* small fix

* Update dependencies in Cargo.lock

* Update minio image to satantime/minio-server

* Refactor snapshot storage paths in snapshots_manager.rs and snapshot_storage_ops.rs

* Fix issue with downloaded file size not matching expected size in download_snapshot function

* add flush

* Use Streaming instead of donloading once

* apply `cargo +nightly fmt --all`

* Fix issue with opening file in SnapshotStream::LocalFS variant

* Fix error handling in SnapshotStream::LocalFS variant

* Add integration test for Shard Snapshot API with S3 storage (#7)
2024-05-26 12:27:36 +02:00
Tim Visée fe1458dc2e Add API key field to snapshot restore, fix snapshot recovery with API key (#4155)
* Add API key to HTTP client

* Add API key field to snapshot recovery requests

* Add API key to channel service

* Provide API key when doing snapshot transfer

* Configure API key header name constant in a central place

* Reformat

* Update OpenAPI spec

* Remove suffixed spaces from configuration file

* Allow to specify HTTP headers in some consensus test utility functions

* Add snapshot transfer test with configured API key

* Use random API key in test

* Fix compilation errors and clippy warnings
2024-05-02 19:20:19 +02:00
Andrey Vasnetsov 772b31da70 add config property to disable jwt by default (#3923) 2024-04-22 10:28:01 +02:00
Tim Visée 0368ce5734 Use WAL delta transfer by default for shard recovery for 1.9 (#3800)
* Move peer metadata type around

* Expose peer metadata in channel service

* Use WAL delta transfer by default for recovery, if all nodes are 1.8+

* Add check for missing metadata, assume versionless if we have less

* Use user configured shard transfer method, fall back to WAL delta/stream

* Minor improvements

* Update variable name
2024-04-22 10:23:13 +02:00
Tim Visée c6407abbb3 Dynamic CPU saturation integration (#3115)
* Integrate dynamic CPU saturation with public API changes

This reverts commit 08930fefa9.

* Call num_cpus only once
2024-03-05 16:57:43 +01:00
1951426533 Dynamic CPU saturation internals (#3364)
* Move CPU count function to common, fix wrong CPU count in visited list

* Change default number of rayon threads to 8

* Use CPU budget and CPU permits for optimizer tasks to limit utilization

* Respect configured thread limits, use new sane defaults in config

* Fix spelling issues

* Fix test compilation error

* Improve breaking if there is no CPU budget

* Block optimizations until CPU budget, fix potentially getting stuck

Our optimization worker now blocks until CPU budget is available to
perform the task.

Fix potential issue where optimization worker could get stuck. This
would happen if no optimization task is started because there's no
available CPU budget. This ensures the worker is woken up again to
retry.

* Utilize n-1 CPUs with optimization tasks

* Better handle situations where CPU budget is drained

* Dynamically scale rayon CPU count based on CPU size

* Fix incorrect default for max_indexing_threads conversion

* Respect max_indexing_threads for collection

* Make max_indexing_threads optional, use none to set no limit

* Update property documentation and comments

* Property max_optimization_threads is per shard, not per collection

* If we reached shard optimization limit, skip further checks

* Add remaining TODOs

* Fix spelling mistake

* Align gRPC comment blocks

* Fix compilation errors since last rebase

* Make tests aware of CPU budget

* Use new CPU budget calculation function everywhere

* Make CPU budget configurable in settings, move static budget to common

* Do not use static CPU budget, instance it and pass it through

* Update CPU budget description

* Move heuristic into defaults

* Fix spelling issues

* Move cpu_budget property to a better place

* Move some things around

* Minor review improvements

* Use range match statement for CPU count heuristics

* Systems with 1 or 2 CPUs do not keep cores unallocated by default

* Fix compilation errors since last rebase

* Update lib/segment/src/types.rs

Co-authored-by: Luis Cossío <luis.cossio@qdrant.com>

* Update lib/storage/src/content_manager/toc/transfer.rs

Co-authored-by: Luis Cossío <luis.cossio@qdrant.com>

* Rename cpu_budget to optimizer_cpu_budget

* Update OpenAPI specification

* Require at least half of the desired CPUs for optimizers

This prevents running optimizations with just one CPU, which could be
very slow.

* Don't use wildcard in CPU heuristic match statements

* Rename cpu_budget setting to optimizer_cpu_budget

* Update CPU budget comments

* Spell acquire correctly

* Change if-else into match

Co-authored-by: Luis Cossío <luis.cossio@qdrant.com>

* Rename max_rayon_threads to num_rayon_threads, add explanation

* Explain limit in update handler

* Remove numbers for automatic selection of indexing threads

* Inline max_workers variable

* Remove CPU budget from ShardTransferConsensus trait, it is in collection

* small allow(dead_code) => cfg(test)

* Remove now obsolete lazy_static

* Fix incorrect CPU calculation in CPU saturation test

* Make waiting for CPU budget async, don't block current thread

* Prevent deadlock on optimizer signal channel

Do not block the optimization worker task anymore to wait for CPU budget
to be available. That prevents our optimizer signal channel from being
drained, blocking incoming updates because the cannot send another
optimizer signal. Now, prevent blocking this task all together and
retrigger the optimizers separately when CPU budget is available again.

* Fix incorrect CPU calculation in optimization cancel test

* Rename CPU budget wait function to notify

* Detach API changes from CPU saturation internals

This allows us to merge into a patch version of Qdrant. We can
reintroduce the API changes in the upcoming minor release to make all of
it fully functional.

---------

Co-authored-by: Luis Cossío <luis.cossio@qdrant.com>
Co-authored-by: Luis Cossío <luis.cossio@outlook.com>
2024-03-05 16:57:12 +01:00
Tim Visée defd14dcbf Add config property to set default shard transfer method (#3255)
* Add config option to set default automatic shard transfer method

* Also use configured shard transfer method if user doesn't specify

This is not for automatic shard transfers, but when a user initiates a
transfer manually.

* Improve comment for shard transfer method configuration

* Fix test compilation
2024-03-05 16:41:45 +01:00
835da459cb Limit automatic shard transfers (stateless) (#3458)
* Do not select ourselves when finding auto shard transfer source

* Limit automatic shard transfers with basic transfer count check

* Extract shard recovery transfer request logic to separate function

* Add global shard transfer tracker structure to allow rate limiting

* Count and limit incoming and outgoing shard transfers separately

* Make automatic shard transfer limit configurable

* Move shard transfer tracker from global to collection level

* Comment out new config parameters

* Fix incorrect comment

* Fix missing space in log message

* Fix negated condition

* Remove logic for requesting shard transfer on replica state change

* Check shard transfer limits in consensus sync, use consensus state

Instead of bothering with tracking proposed shard transfers, this now
purely relies on state that is already in consensus. Each time we sync
consensus, we request the maximum number of shard transfers up to the
limit at that time.

* Remove now obsolete shard transfer tracker

* Revert now obsolete changes

* Improve transfer IO counting comment, revert now obsolete code

* Fix typos

* Fix flipped variables, don't take self reference on Copyable type

* Update lib/collection/src/collection/shard_transfer.rs

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

* Handle incoming/outgoing transfer counts separately, don't tuple it

* Improve loop for counting incoming/outgoing transfers

* Remove unused test function

* Add consensus tests for automatic shard transfer limits

* Apply suggestions from code review

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

* Remove debug lines from new test

* Reorder last test a bit to resolve flakyness

* We can have one more transfer for recovery on the other alive node

* Attempt to reduce test flakyness, more points and more frequent polling

* Update config/config.yaml

Co-authored-by: Luis Cossío <luis.cossio@qdrant.com>

* Explicitly note default shard transfer limit in configuration

* Use default for shard transfer IO everywhere

* Rename transfer limit check function to be more explicit

---------

Co-authored-by: Roman Titov <ffuugoo@users.noreply.github.com>
Co-authored-by: Luis Cossío <luis.cossio@qdrant.com>
2024-01-29 14:27:55 +01:00
8b7211cb20 Read-Only API keys (#2979)
* Read-only API keys

Co-authored-by: Luis Cossío <luis.cossio@outlook.com>

Correct placement of OpenAPI security

Place regex dep with actix/tonic

* Read-only API keys

* Replace with pytests

* API Key tests run on the same job

* Drop allow dead-code

* Rename setting key

* Containerized tests

* No special config files

* DRY

* refactor: re-use can_write method

* refactor: replace static by constants

* refactor: get PID from `$!`

* refactor: use explicit brackets on boolean condition

* style: fix identation

* small fixes + account for new APIs

* specify security in openapi

* small fix + chmod for .sh testfile

* add best-efford check for api consistency

---------

Co-authored-by: Amr Hassan <amr.hassan@gmail.com>
Co-authored-by: generall <andrey@vasnetsov.com>
2023-12-06 17:11:33 +01:00
Alexander A 2f996faa34 add update_rate_limit param into config file (#2848) 2023-12-06 16:48:40 +01:00
20740b9e98 Add update_concurrency option to control the parallelism of shard updates (#2599)
* add update_concurrency to control the parallelism of updating shards

* reformat the files

* reformat

* add update_concurrency control to shard updates

* use unwrap_or

* test using buffer_ordered

* use buffered (testing)

* Pre-allocate space for update futures

* use NonZeroUsize

* linter

* use NonZeroUsize in the test

* consensus test for update_concurrency

* update config commit

---------

Co-authored-by: Di Zhao <diz@twitter.com>
Co-authored-by: timvisee <tim@visee.me>
Co-authored-by: generall <andrey@vasnetsov.com>
2023-10-06 12:34:52 +02:00
Arnaud Gourlay b0cd0b62d5 Remove unused debug setting (#2339) 2023-09-04 16:42:41 +02:00
eae93b2776 Configurable location of temporary snapshot files (#1960)
* Issue 1905: Configurable location for the tmp snapshot files

* Apply suggestions from code review

Co-authored-by: Tim Visée <tim+github@visee.me>

* fix code review suggestions

* clippy fix

* Propagate temp path, use configured dir for snapshot creation

* Use real temp dir in snapshot tests

* Mention default temporary snapshot file path in configuration

* Use temp everywhere rather than a mix of temp and tmp

* Use consistent naming for temporary snapshot directories

* Extract logic for temporary storage path into toc method

* Resolve clippy warnings

* Apply suggestions from code review

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

---------

Co-authored-by: Tim Visée <tim+github@visee.me>
Co-authored-by: timvisee <tim@visee.me>
Co-authored-by: Roman Titov <ffuugoo@users.noreply.github.com>
2023-06-23 11:00:27 +02:00
Yusuf Anı 067574998a Update config.yaml (#2059) 2023-06-19 15:21:38 +02:00
Andrey Vasnetsov 16ddb98134 Web UI integration (#2009)
* wip: integrate UI web interface

* fmt

* Api key exclusion rule + fixes

* upd welcome url

* rollback api key in config
2023-06-19 15:00:30 +02:00
403162125a Migrate from OpenSSL to Rustls (#1865)
* Migrate from OpenSSL to Rustls

* Add TTL based certificate rotation for Rustls in actix

See: <https://github.com/qdrant/qdrant/pull/1865#issuecomment-1539752859>

* Update last update time when certificate is replaced

* Update error message

* Add option to disable certificate TTL, add TTL validation

* Cleanup

* Update comment for service.enable_tls, also enables TLS for gRPC

* Apply suggestions from code review

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

* Move with_buf_read into certificate_helpers, it is used there

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

* Remove level of scoping

* Add TLS enabled/disabled log messages

---------

Co-authored-by: timvisee <tim@visee.me>
Co-authored-by: Tim Visée <tim+github@visee.me>
Co-authored-by: Roman Titov <ffuugoo@users.noreply.github.com>
2023-06-19 14:45:30 +02:00
Russ Cam a80d4cb371 Fix documentation links (#2000)
* Update documentation links

This commit updates documentation links to point to
the correct locations.

* formatting
2023-05-31 10:02:10 +02:00
Luis CossíoandAndrey Vasnetsov 49dba4dd92 Disable indexing and memmap with 0 (#1824)
* feat: use 0 as disable for indexing and memmap

* amend: edit test, update doc comments, remove validation

* fix: use constant instead of literal, reword doc comments

* test: update test for loop and timeout

* fix: remove validation on OptimizerConfigDiff and fix test_validatioin.py

* fix: remove validation from build.rs, remove internal hack from  doccomments

* fix: update grpc docs

* revert max_optimization_threads validation in test

* update config comments and minor test change

---------

Co-authored-by: Andrey Vasnetsov <andrey@vasnetsov.com>
2023-05-17 11:22:34 +02:00
Yiping Dengandtimvisee 8687d2863e Add support for TLS certificate rotation (#1808)
* Add certificate roatation for actix

* Add config file explaination

* Fix code style

* Drop pub modifier for helper module

* Fix clippy error

* Fixing PR comments

* Remove unused variable and fix clippy

* Transform option building in if-else to then_some

---------

Co-authored-by: timvisee <tim@visee.me>
2023-05-17 11:21:39 +02:00
b7d0d67a58 feat: embed default config file at compile time (#1776)
* feat: embed default config file at compile time

* Add `test_no_config_files` and supporting `find_config_files` parameter

* Error if `RUN_MODE` set but can't find config files

* feat: warn if config files not found

* remove find_config_files flag

* Add test to deserialize just the embedded default config

---------

Co-authored-by: Andrey Vasnetsov <andrey@vasnetsov.com>
Co-authored-by: timvisee <tim@visee.me>
2023-05-17 11:18:42 +02:00
Roman TitovandAndrey Vasnetsov ecfeefdaa8 Improve handling of out-of-disk-space errors during Qdrant startup (#1755)
Co-authored-by: Andrey Vasnetsov <andrey@vasnetsov.com>
2023-05-17 11:14:42 +02:00
paulotten cbde5b5a73 feat: built in api-key auth (#1745)
* feat: built in api-key auth

* doc: Sending an api-key over an unencrypted channel is insecure.

* feat: constant time comparision for api-keys

* use `option_layer`
2023-05-17 11:08:30 +02:00
Tim Visée 5f3db2694f Minor HNSW configuration comment improvement to match docs (#1693)
See https://github.com/qdrant/docs/pull/89
2023-04-11 14:32:13 +02:00