20260803 死repo传输层黑名单+daemon健康检查摘除(#141)

This commit is contained in:
2026-08-03 21:17:19 +08:00
parent f37fe8c4cb
commit e98eb6d68f
16 changed files with 1990 additions and 38 deletions

View File

@@ -345,6 +345,56 @@ fn persist_transport_request_prefetch_snapshot(
Ok(())
}
/// Persist the dead-repo blacklist working copy at run end (#141). Failures
/// degrade to a progress event; a broken blacklist file must never fail a run.
fn persist_dead_repo_blacklist(
runtime: &Arc<dyn RepoSyncRuntime>,
timing: Option<&TimingHandle>,
) -> Result<(), RunTreeFromTalError> {
let Some((blacklist_config, blacklist)) = runtime.dead_repo_blacklist_state() else {
return Ok(());
};
let persist_started = std::time::Instant::now();
let now_unix = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.map(|duration| duration.as_secs())
.unwrap_or(0);
match blacklist.store_atomic(&blacklist_config.path, now_unix) {
Ok(()) => {
let persist_ms = persist_started.elapsed().as_millis() as u64;
record_transport_prefetch_count(
timing,
"dead_repo_blacklist_entries",
blacklist.len() as u64,
);
record_transport_prefetch_count(
timing,
"dead_repo_blacklist_blacklisted",
blacklist.blacklisted_len() as u64,
);
crate::progress_log::emit(
"dead_repo_blacklist_persisted",
serde_json::json!({
"path": blacklist_config.path.display().to_string(),
"entries": blacklist.len(),
"blacklisted": blacklist.blacklisted_len(),
"persist_ms": persist_ms,
}),
);
}
Err(err) => {
crate::progress_log::emit(
"dead_repo_blacklist_persist_error",
serde_json::json!({
"path": blacklist_config.path.display().to_string(),
"error": err.to_string(),
}),
);
}
}
Ok(())
}
fn root_discovery_from_tal_input(
tal_input: &TalInputSpec,
http_fetcher: &dyn Fetcher,
@@ -813,6 +863,7 @@ where
run_tree_serial_audit(root, &runner, config)?
};
persist_transport_request_prefetch_snapshot(store.as_ref(), &runtime, config, timing.as_ref())?;
persist_dead_repo_blacklist(&runtime, timing.as_ref())?;
let downloads = download_log.snapshot_events();
let download_stats = DownloadLogHandle::stats_from_events(&downloads);
Ok(RunTreeFromTalAuditOutput {
@@ -936,6 +987,7 @@ where
run_tree_serial_audit_multi_root(root_handles, &runner, config)?
};
persist_transport_request_prefetch_snapshot(store.as_ref(), &runtime, config, timing.as_ref())?;
persist_dead_repo_blacklist(&runtime, timing.as_ref())?;
let downloads = download_log.snapshot_events();
let download_stats = DownloadLogHandle::stats_from_events(&downloads);
Ok(RunTreeFromTalAuditOutput {