use super::*;
impl DaemonServer {
pub fn dep_graph_setter(&self) -> DepGraphSetter {
DepGraphSetter {
state: Arc::clone(&self.state),
}
}
pub fn compiler_hash_cache_loader(&self) -> CompilerHashCacheLoader {
CompilerHashCacheLoader {
state: Arc::clone(&self.state),
path: self.state.compiler_hash_cache_path.clone(),
}
}
pub fn metadata_cache_loader(&self) -> MetadataCacheLoader {
MetadataCacheLoader {
state: Arc::clone(&self.state),
path: self.state.metadata_path.clone(),
}
}
pub fn system_includes_loader(&self) -> SystemIncludesLoader {
SystemIncludesLoader {
state: Arc::clone(&self.state),
path: self.state.system_includes_cache_path.clone(),
}
}
pub fn artifact_store_loader(&self) -> ArtifactStoreLoader {
ArtifactStoreLoader {
state: Arc::clone(&self.state),
store: Arc::clone(&self.state.artifact_store),
}
}
}
pub struct DepGraphSetter {
state: Arc<SharedState>,
}
impl DepGraphSetter {
pub fn install(self, graph: Option<crate::daemon_core::depgraph::DepGraph>, warning: Option<String>) {
if let Some(graph) = graph {
self.state.dep_graph.store(Arc::new(graph));
self.state
.dep_graph_persisted
.store(true, Ordering::Release);
}
if let Some(warning) = warning {
let mut guard = self
.state
.depgraph_load_warning
.lock()
.unwrap_or_else(|poisoned| poisoned.into_inner());
*guard = Some(warning);
}
self.state
.dep_graph_load_complete
.store(true, Ordering::Release);
self.state.dep_graph_load_notify.notify_waiters();
}
}
pub struct CompilerHashCacheLoader {
state: Arc<SharedState>,
path: crate::daemon_core::core::NormalizedPath,
}
pub struct SystemIncludesLoader {
state: Arc<SharedState>,
path: crate::daemon_core::core::NormalizedPath,
}
pub struct ArtifactStoreLoader {
state: Arc<SharedState>,
store: Arc<ArtifactStore>,
}
impl ArtifactStoreLoader {
pub fn load_and_install(self) {
if let Err(e) = self.store.load_from_disk() {
tracing::warn!("artifact index load failed, continuing with empty store: {e}");
}
self.state
.artifact_store_loaded
.store(true, Ordering::Release);
}
}
impl SystemIncludesLoader {
pub fn load_and_install(self) {
match crate::daemon_core::depgraph::SystemIncludeCache::load_from_disk(self.path.as_path()) {
Ok(loaded) => {
let loaded_len = loaded.len();
{
let mut live = self.state.system_includes.blocking_lock();
live.merge_from(loaded);
}
if loaded_len > 0 {
tracing::info!(
loaded = loaded_len,
path = %self.path.display(),
"system include cache restored from disk (background)"
);
}
}
Err(e) => {
tracing::warn!(
path = %self.path.display(),
"failed to load system include cache, starting empty: {e}"
);
}
}
self.state
.system_includes_loaded
.store(true, Ordering::Release);
}
}
impl CompilerHashCacheLoader {
pub fn load_and_install(self) {
match CompilerHashCache::load_from_disk(self.path.as_path()) {
Ok(loaded) => {
self.state.compiler_hash_cache.merge_from(loaded);
}
Err(e) => {
tracing::warn!(
path = %self.path.display(),
"failed to load compiler hash cache, starting empty: {e}"
);
}
}
self.state
.compiler_hash_cache_loaded
.store(true, Ordering::Release);
}
}
pub struct MetadataCacheLoader {
state: Arc<SharedState>,
path: crate::daemon_core::core::NormalizedPath,
}
impl MetadataCacheLoader {
pub fn load_and_install(self) {
match crate::daemon_core::fscache::MetadataCache::load_from_disk(self.path.as_path()) {
Ok(loaded) => {
let loaded_len = loaded.len();
self.state.cache_system.metadata().merge_from(loaded);
if loaded_len > 0 {
tracing::info!(
loaded = loaded_len,
path = %self.path.display(),
"metadata cache restored from disk (background)"
);
}
}
Err(e) => {
tracing::warn!(
path = %self.path.display(),
"failed to load metadata cache, starting empty: {e}"
);
}
}
self.state
.metadata_cache_loaded
.store(true, Ordering::Release);
}
}