mirror of
https://github.com/qdrant/qdrant.git
synced 2026-08-02 16:10:58 -05:00
* [manual] generate snapshot download link with respect of enabled tls * Simplify http(s) selection --------- Co-authored-by: Tim Visée <tim+github@visee.me>
151 lines
4.4 KiB
Rust
151 lines
4.4 KiB
Rust
use std::num::NonZeroU32;
|
|
use std::path::Path;
|
|
use std::sync::Arc;
|
|
|
|
use collection::collection::{Collection, RequestShardTransfer};
|
|
use collection::config::{CollectionConfigInternal, CollectionParams, WalConfig};
|
|
use collection::operations::types::CollectionResult;
|
|
use collection::operations::vector_params_builder::VectorParamsBuilder;
|
|
use collection::optimizers_builder::OptimizersConfig;
|
|
use collection::shards::CollectionId;
|
|
use collection::shards::channel_service::ChannelService;
|
|
use collection::shards::collection_shard_distribution::CollectionShardDistribution;
|
|
use collection::shards::replica_set::replica_set_state::ReplicaState;
|
|
use collection::shards::replica_set::{AbortShardTransfer, ChangePeerFromState};
|
|
use common::budget::ResourceBudget;
|
|
use segment::types::Distance;
|
|
|
|
/// Test collections for this upper bound of shards.
|
|
/// Testing with more shards is problematic due to `number of open files problem`
|
|
/// See https://github.com/qdrant/qdrant/issues/379
|
|
pub const N_SHARDS: u32 = 3;
|
|
|
|
pub const REST_PORT: u16 = 6333;
|
|
|
|
pub const TEST_OPTIMIZERS_CONFIG: OptimizersConfig = OptimizersConfig {
|
|
deleted_threshold: 0.9,
|
|
vacuum_min_vector_number: 1000,
|
|
default_segment_number: 2,
|
|
max_segment_size: None,
|
|
#[expect(deprecated)]
|
|
memmap_threshold: None,
|
|
indexing_threshold: Some(50_000),
|
|
flush_interval_sec: 30,
|
|
max_optimization_threads: Some(2),
|
|
prevent_unoptimized: None,
|
|
};
|
|
|
|
#[cfg(test)]
|
|
pub async fn simple_collection_fixture(collection_path: &Path, shard_number: u32) -> Collection {
|
|
let wal_config = WalConfig {
|
|
wal_capacity_mb: 1,
|
|
wal_segments_ahead: 0,
|
|
wal_retain_closed: 1,
|
|
};
|
|
|
|
let collection_params = CollectionParams {
|
|
vectors: VectorParamsBuilder::new(4, Distance::Dot).build().into(),
|
|
shard_number: NonZeroU32::new(shard_number).expect("Shard number can not be zero"),
|
|
..CollectionParams::empty()
|
|
};
|
|
|
|
let collection_config = CollectionConfigInternal {
|
|
params: collection_params,
|
|
optimizer_config: TEST_OPTIMIZERS_CONFIG.clone(),
|
|
wal_config,
|
|
hnsw_config: Default::default(),
|
|
quantization_config: Default::default(),
|
|
strict_mode_config: Default::default(),
|
|
uuid: None,
|
|
metadata: None,
|
|
};
|
|
|
|
let snapshot_path = collection_path.join("snapshots");
|
|
|
|
// Default to a collection with all the shards local
|
|
new_local_collection(
|
|
"test".to_string(),
|
|
collection_path,
|
|
&snapshot_path,
|
|
&collection_config,
|
|
)
|
|
.await
|
|
.unwrap()
|
|
}
|
|
|
|
pub fn dummy_on_replica_failure() -> ChangePeerFromState {
|
|
Arc::new(move |_peer_id, _shard_id, _from_state| {})
|
|
}
|
|
|
|
pub fn dummy_request_shard_transfer() -> RequestShardTransfer {
|
|
Arc::new(move |_transfer| {})
|
|
}
|
|
|
|
pub fn dummy_abort_shard_transfer() -> AbortShardTransfer {
|
|
Arc::new(|_transfer, _reason| {})
|
|
}
|
|
|
|
/// Default to a collection with all the shards local
|
|
#[cfg(test)]
|
|
pub async fn new_local_collection(
|
|
id: CollectionId,
|
|
path: &Path,
|
|
snapshots_path: &Path,
|
|
config: &CollectionConfigInternal,
|
|
) -> CollectionResult<Collection> {
|
|
let collection = Collection::new(
|
|
id,
|
|
0,
|
|
path,
|
|
snapshots_path,
|
|
config,
|
|
Default::default(),
|
|
CollectionShardDistribution::all_local(Some(config.params.shard_number.into()), 0),
|
|
None,
|
|
ChannelService::new(REST_PORT, false, None, None),
|
|
dummy_on_replica_failure(),
|
|
dummy_request_shard_transfer(),
|
|
dummy_abort_shard_transfer(),
|
|
None,
|
|
None,
|
|
ResourceBudget::default(),
|
|
None,
|
|
)
|
|
.await;
|
|
|
|
let collection = collection?;
|
|
|
|
let local_shards = collection.get_local_shards().await;
|
|
for shard_id in local_shards {
|
|
collection
|
|
.set_shard_replica_state(shard_id, 0, ReplicaState::Active, None)
|
|
.await?;
|
|
}
|
|
Ok(collection)
|
|
}
|
|
|
|
/// Default to a collection with all the shards local
|
|
#[cfg(test)]
|
|
pub async fn load_local_collection(
|
|
id: CollectionId,
|
|
path: &Path,
|
|
snapshots_path: &Path,
|
|
) -> Collection {
|
|
Collection::load(
|
|
id,
|
|
0,
|
|
path,
|
|
snapshots_path,
|
|
Default::default(),
|
|
ChannelService::new(REST_PORT, false, None, None),
|
|
dummy_on_replica_failure(),
|
|
dummy_request_shard_transfer(),
|
|
dummy_abort_shard_transfer(),
|
|
None,
|
|
None,
|
|
ResourceBudget::default(),
|
|
None,
|
|
)
|
|
.await
|
|
}
|