use std::path::PathBuf;
use crate::segment::common::memory_usage::{ComponentMemoryUsage, FileStorageIntent, MemoryReporter};
use crate::segment::vector_storage::vector_storage_base::{
DenseVectorStorage as _, MultiVectorStorage as _, VectorStorage as _, VectorStorageEnum,
VectorStorageRead as _,
};
fn from_files_with_on_disk(files: Vec<PathBuf>, is_on_disk: bool) -> ComponentMemoryUsage {
let intent = if is_on_disk {
FileStorageIntent::OnDisk
} else {
FileStorageIntent::Cached
};
ComponentMemoryUsage::from_files(files, intent)
}
impl MemoryReporter for VectorStorageEnum {
fn memory_usage(&self) -> ComponentMemoryUsage {
match self {
VectorStorageEnum::DenseVolatile(v) => {
ComponentMemoryUsage::ram_only(v.size_of_available_vectors_in_bytes() as u64)
}
#[cfg(test)]
VectorStorageEnum::DenseVolatileByte(v) => {
ComponentMemoryUsage::ram_only(v.size_of_available_vectors_in_bytes() as u64)
}
#[cfg(test)]
VectorStorageEnum::DenseVolatileHalf(v) => {
ComponentMemoryUsage::ram_only(v.size_of_available_vectors_in_bytes() as u64)
}
VectorStorageEnum::DenseMemmap(v) => from_files_with_on_disk(v.files(), v.is_on_disk()),
VectorStorageEnum::DenseMemmapByte(v) => {
from_files_with_on_disk(v.files(), v.is_on_disk())
}
VectorStorageEnum::DenseMemmapHalf(v) => {
from_files_with_on_disk(v.files(), v.is_on_disk())
}
#[cfg(target_os = "linux")]
VectorStorageEnum::DenseUring(v) => {
ComponentMemoryUsage::from_files(v.files(), FileStorageIntent::OnDisk)
}
#[cfg(target_os = "linux")]
VectorStorageEnum::DenseUringByte(v) => {
ComponentMemoryUsage::from_files(v.files(), FileStorageIntent::OnDisk)
}
#[cfg(target_os = "linux")]
VectorStorageEnum::DenseUringHalf(v) => {
ComponentMemoryUsage::from_files(v.files(), FileStorageIntent::OnDisk)
}
VectorStorageEnum::DenseAppendableMemmap(v) => {
from_files_with_on_disk(v.files(), v.is_on_disk())
}
VectorStorageEnum::DenseAppendableMemmapByte(v) => {
from_files_with_on_disk(v.files(), v.is_on_disk())
}
VectorStorageEnum::DenseAppendableMemmapHalf(v) => {
from_files_with_on_disk(v.files(), v.is_on_disk())
}
VectorStorageEnum::SparseVolatile(v) => {
ComponentMemoryUsage::ram_only(v.size_of_available_vectors_in_bytes() as u64)
}
VectorStorageEnum::SparseMmap(v) => from_files_with_on_disk(v.files(), v.is_on_disk()),
VectorStorageEnum::MultiDenseVolatile(v) => {
ComponentMemoryUsage::ram_only(v.size_of_available_vectors_in_bytes() as u64)
}
#[cfg(test)]
VectorStorageEnum::MultiDenseVolatileByte(v) => {
ComponentMemoryUsage::ram_only(v.size_of_available_vectors_in_bytes() as u64)
}
#[cfg(test)]
VectorStorageEnum::MultiDenseVolatileHalf(v) => {
ComponentMemoryUsage::ram_only(v.size_of_available_vectors_in_bytes() as u64)
}
VectorStorageEnum::MultiDenseAppendableMemmap(v) => {
from_files_with_on_disk(v.files(), v.is_on_disk())
}
VectorStorageEnum::MultiDenseAppendableMemmapByte(v) => {
from_files_with_on_disk(v.files(), v.is_on_disk())
}
VectorStorageEnum::MultiDenseAppendableMemmapHalf(v) => {
from_files_with_on_disk(v.files(), v.is_on_disk())
}
VectorStorageEnum::EmptyDense(_) => ComponentMemoryUsage::empty(),
VectorStorageEnum::EmptySparse(_) => ComponentMemoryUsage::empty(),
}
}
}