20260418_2 phase2 并行优化 mix quick 耗时105/48秒
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user