Gouzi Mohaled
Ajout du dossier lib
84d2a97
use std::num::NonZeroUsize;
use std::sync::Arc;
use collection::operations::vector_params_builder::VectorParamsBuilder;
use collection::operations::verification::new_unchecked_verification_pass;
use collection::optimizers_builder::OptimizersConfig;
use collection::shards::channel_service::ChannelService;
use common::cpu::CpuBudget;
use memory::madvise;
use segment::types::Distance;
use storage::content_manager::collection_meta_ops::{
ChangeAliasesOperation, CollectionMetaOperations, CreateAlias, CreateCollection,
CreateCollectionOperation, DeleteAlias, RenameAlias,
};
use storage::content_manager::consensus::operation_sender::OperationSender;
use storage::content_manager::toc::TableOfContent;
use storage::dispatcher::Dispatcher;
use storage::rbac::{Access, AccessRequirements};
use storage::types::{PerformanceConfig, StorageConfig};
use tempfile::Builder;
use tokio::runtime::Runtime;
const FULL_ACCESS: Access = Access::full("For test");
#[test]
fn test_alias_operation() {
let storage_dir = Builder::new().prefix("storage").tempdir().unwrap();
let config = StorageConfig {
storage_path: storage_dir.path().to_str().unwrap().to_string(),
snapshots_path: storage_dir
.path()
.join("snapshots")
.to_str()
.unwrap()
.to_string(),
snapshots_config: Default::default(),
temp_path: None,
on_disk_payload: false,
on_disk_payload_uses_mmap: false,
optimizers: OptimizersConfig {
deleted_threshold: 0.5,
vacuum_min_vector_number: 100,
default_segment_number: 2,
max_segment_size: None,
memmap_threshold: Some(100),
indexing_threshold: Some(100),
flush_interval_sec: 2,
max_optimization_threads: Some(2),
},
optimizers_overwrite: None,
wal: Default::default(),
performance: PerformanceConfig {
max_search_threads: 1,
max_optimization_threads: 1,
optimizer_cpu_budget: 0,
update_rate_limit: None,
search_timeout_sec: None,
incoming_shard_transfers_limit: Some(1),
outgoing_shard_transfers_limit: Some(1),
async_scorer: None,
},
hnsw_index: Default::default(),
mmap_advice: madvise::Advice::Random,
node_type: Default::default(),
update_queue_size: Default::default(),
handle_collection_load_errors: false,
recovery_mode: None,
update_concurrency: Some(NonZeroUsize::new(2).unwrap()),
// update_concurrency: None,
shard_transfer_method: None,
collection: None,
};
let search_runtime = Runtime::new().unwrap();
let handle = search_runtime.handle().clone();
let update_runtime = Runtime::new().unwrap();
let general_runtime = Runtime::new().unwrap();
let (propose_sender, _propose_receiver) = std::sync::mpsc::channel();
let propose_operation_sender = OperationSender::new(propose_sender);
let toc = Arc::new(TableOfContent::new(
&config,
search_runtime,
update_runtime,
general_runtime,
CpuBudget::default(),
ChannelService::new(6333, None),
0,
Some(propose_operation_sender),
));
let dispatcher = Dispatcher::new(toc);
handle
.block_on(
dispatcher.submit_collection_meta_op(
CollectionMetaOperations::CreateCollection(CreateCollectionOperation::new(
"test".to_string(),
CreateCollection {
vectors: VectorParamsBuilder::new(10, Distance::Cosine)
.build()
.into(),
sparse_vectors: None,
hnsw_config: None,
wal_config: None,
optimizers_config: None,
shard_number: Some(1),
on_disk_payload: None,
replication_factor: None,
write_consistency_factor: None,
init_from: None,
quantization_config: None,
sharding_method: None,
strict_mode_config: None,
uuid: None,
},
)),
FULL_ACCESS,
None,
),
)
.unwrap();
handle
.block_on(dispatcher.submit_collection_meta_op(
CollectionMetaOperations::ChangeAliases(ChangeAliasesOperation {
actions: vec![CreateAlias {
collection_name: "test".to_string(),
alias_name: "test_alias".to_string(),
}
.into()],
}),
FULL_ACCESS,
None,
))
.unwrap();
handle
.block_on(dispatcher.submit_collection_meta_op(
CollectionMetaOperations::ChangeAliases(ChangeAliasesOperation {
actions: vec![
CreateAlias {
collection_name: "test".to_string(),
alias_name: "test_alias2".to_string(),
}
.into(),
DeleteAlias {
alias_name: "test_alias".to_string(),
}
.into(),
RenameAlias {
old_alias_name: "test_alias2".to_string(),
new_alias_name: "test_alias3".to_string(),
}
.into(),
],
}),
FULL_ACCESS,
None,
))
.unwrap();
// Nothing to verify here.
let pass = new_unchecked_verification_pass();
let _ = handle
.block_on(
dispatcher.toc(&FULL_ACCESS, &pass).get_collection(
&FULL_ACCESS
.check_collection_access("test_alias3", AccessRequirements::new())
.unwrap(),
),
)
.unwrap();
}