use crate::{
error::Result,
execution::{
disk_manager::{DiskManager, DiskManagerConfig},
memory_manager::{MemoryConsumerId, MemoryManager, MemoryManagerConfig},
},
};
use std::fmt::{Debug, Formatter};
use std::sync::Arc;
#[derive(Clone)]
pub struct RuntimeEnv {
pub batch_size: usize,
pub memory_manager: Arc<MemoryManager>,
pub disk_manager: Arc<DiskManager>,
}
impl Debug for RuntimeEnv {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
write!(f, "RuntimeEnv")
}
}
impl RuntimeEnv {
pub fn new(config: RuntimeConfig) -> Result<Self> {
let RuntimeConfig {
batch_size,
memory_manager,
disk_manager,
} = config;
Ok(Self {
batch_size,
memory_manager: MemoryManager::new(memory_manager),
disk_manager: DiskManager::try_new(disk_manager)?,
})
}
pub fn batch_size(&self) -> usize {
self.batch_size
}
pub fn register_requester(&self, id: &MemoryConsumerId) {
self.memory_manager.register_requester(id);
}
pub fn drop_consumer(&self, id: &MemoryConsumerId, mem_used: usize) {
self.memory_manager.drop_consumer(id, mem_used)
}
pub fn grow_tracker_usage(&self, delta: usize) {
self.memory_manager.grow_tracker_usage(delta)
}
pub fn shrink_tracker_usage(&self, delta: usize) {
self.memory_manager.shrink_tracker_usage(delta)
}
}
impl Default for RuntimeEnv {
fn default() -> Self {
RuntimeEnv::new(RuntimeConfig::new()).unwrap()
}
}
#[derive(Clone)]
pub struct RuntimeConfig {
pub batch_size: usize,
pub disk_manager: DiskManagerConfig,
pub memory_manager: MemoryManagerConfig,
}
impl RuntimeConfig {
pub fn new() -> Self {
Default::default()
}
pub fn with_batch_size(mut self, n: usize) -> Self {
assert!(n > 0);
self.batch_size = n;
self
}
pub fn with_disk_manager(mut self, disk_manager: DiskManagerConfig) -> Self {
self.disk_manager = disk_manager;
self
}
pub fn with_memory_manager(mut self, memory_manager: MemoryManagerConfig) -> Self {
self.memory_manager = memory_manager;
self
}
}
impl Default for RuntimeConfig {
fn default() -> Self {
Self {
batch_size: 8192,
disk_manager: DiskManagerConfig::default(),
memory_manager: MemoryManagerConfig::default(),
}
}
}