mod cache_manager;
mod disk;
pub mod error;
use std::path::PathBuf;
use async_trait::async_trait;
pub use cache_manager::get_cache;
pub use disk::DiskCache;
pub use disk::test_utils::*;
use error::ChunkCacheError;
#[cfg(test)]
use mockall::automock;
use xet_runtime::core::xet_config;
use crate::cas_types::{ChunkRange, Key};
#[derive(Debug)]
pub struct CacheRange {
pub offsets: Vec<u32>,
pub data: Vec<u8>,
pub range: ChunkRange,
}
#[cfg_attr(test, automock)]
#[async_trait]
pub trait ChunkCache: Sync + Send {
async fn get(&self, key: &Key, range: &ChunkRange) -> Result<Option<CacheRange>, ChunkCacheError>;
async fn put(
&self,
key: &Key,
range: &ChunkRange,
chunk_byte_indices: &[u32],
data: &[u8],
) -> Result<(), ChunkCacheError>;
}
#[derive(Debug, Clone)]
pub struct CacheConfig {
pub cache_directory: PathBuf,
pub cache_size: u64,
}
impl Default for CacheConfig {
fn default() -> Self {
CacheConfig {
cache_directory: PathBuf::from("/tmp"),
cache_size: xet_config().chunk_cache.size_bytes,
}
}
}