20260418_2 phase2 并行优化 mix quick 耗时105/48秒

This commit is contained in:
2026-04-19 00:08:29 +08:00
parent 417c82bef6
commit f6a601e16c
21 changed files with 4127 additions and 594 deletions

View File

@@ -81,6 +81,38 @@ impl TransportStateTables {
self.runtime_records.get(identity)
}
pub fn finalized_runtime_records_for_transport(
&self,
dedup_key: &RepoDedupKey,
) -> Vec<RepoRuntimeRecord> {
self.runtime_records
.values()
.filter(|record| match dedup_key {
RepoDedupKey::RrdpNotify { notification_uri } => {
record.rrdp_notification_key.as_deref() == Some(notification_uri.as_str())
}
RepoDedupKey::RsyncScope { rsync_scope_uri } => {
record.rsync_scope_key == *rsync_scope_uri
}
})
.filter(|record| {
matches!(
record.state,
RepoRuntimeState::RrdpOk
| RepoRuntimeState::RsyncOk
| RepoRuntimeState::FailedTerminal
)
})
.cloned()
.collect()
}
pub fn reset_run_state(&mut self) {
self.rrdp_inflight.clear();
self.rsync_inflight.clear();
self.runtime_records.clear();
}
pub fn register_transport_request(
&mut self,
identity: RepoIdentity,
@@ -182,9 +214,9 @@ impl TransportStateTables {
entry.waiting_requesters.push(requester.clone());
self.runtime_records.insert(
identity,
identity.clone(),
RepoRuntimeRecord {
identity: entry.task.repo_identity.clone(),
identity,
state: RepoRuntimeState::WaitingRrdp,
rrdp_notification_key: Some(notification_uri),
rsync_scope_key: rsync_scope_uri,
@@ -263,9 +295,9 @@ impl TransportStateTables {
return match result.result {
RepoTransportResultKind::Success { .. } => {
self.runtime_records.insert(
identity,
identity.clone(),
RepoRuntimeRecord {
identity: entry.task.repo_identity.clone(),
identity,
state: RepoRuntimeState::RsyncOk,
rrdp_notification_key: None,
rsync_scope_key: rsync_scope_uri,
@@ -280,9 +312,9 @@ impl TransportStateTables {
}
RepoTransportResultKind::Failed { .. } => {
self.runtime_records.insert(
identity,
identity.clone(),
RepoRuntimeRecord {
identity: entry.task.repo_identity.clone(),
identity,
state: RepoRuntimeState::FailedTerminal,
rrdp_notification_key: None,
rsync_scope_key: rsync_scope_uri,
@@ -552,6 +584,10 @@ impl InFlightRepoTable {
self.entries.is_empty()
}
pub fn reset_run_state(&mut self) {
self.entries.clear();
}
pub fn get(&self, key: &RepoKey) -> Option<&InFlightRepoEntry> {
self.entries.get(key)
}