mod builder;
pub use builder::{KvbmRuntimeBuilder, RuntimeHandle};
use std::sync::Arc;
use dynamo_memory::nixl::NixlAgent;
use kvbm_config::KvbmConfig;
use tokio::runtime::Handle;
use velo::Messenger;
pub struct KvbmRuntime {
pub(crate) config: KvbmConfig,
pub(crate) runtime: RuntimeHandle,
pub(crate) messenger: Arc<Messenger>,
pub(crate) nixl_agent: Option<NixlAgent>,
}
impl KvbmRuntime {
pub fn builder(config: KvbmConfig) -> KvbmRuntimeBuilder {
KvbmRuntimeBuilder::new(config)
}
pub async fn from_env_leader() -> anyhow::Result<Self> {
KvbmRuntimeBuilder::from_env()?.build_leader().await
}
pub async fn from_env_worker() -> anyhow::Result<Self> {
KvbmRuntimeBuilder::from_env()?.build_worker().await
}
pub fn config(&self) -> &KvbmConfig {
&self.config
}
pub fn handle(&self) -> Handle {
self.runtime.handle()
}
pub fn tokio(&self) -> Handle {
self.handle()
}
pub fn messenger(&self) -> &Arc<Messenger> {
&self.messenger
}
pub fn nixl_agent(&self) -> Option<&NixlAgent> {
self.nixl_agent.as_ref()
}
pub fn event_system(&self) -> Arc<velo::EventManager> {
Arc::new(self.messenger.event_manager())
}
}