entry: Split `start_verify_transactions` into `*_{cpu,gpu}` (#29962)
`start_verify_transactions` is relatively long and contains both a small part of the CPU verification and the full GPU verification code. As CPU and GPU verification are equal peers, it seems easier to follow the code when they each live in separate functions. No functional changes. Only moving code around.
This commit is contained in:
parent
dd9d6e308c
commit
a425cab518
|
@ -432,34 +432,50 @@ pub fn start_verify_transactions(
|
||||||
.is_some();
|
.is_some();
|
||||||
|
|
||||||
if use_cpu {
|
if use_cpu {
|
||||||
|
start_verify_transactions_cpu(entries, skip_verification, verify)
|
||||||
|
} else {
|
||||||
|
start_verify_transactions_gpu(entries, verify_recyclers, verify)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn start_verify_transactions_cpu(
|
||||||
|
entries: Vec<Entry>,
|
||||||
|
skip_verification: bool,
|
||||||
|
verify: Arc<
|
||||||
|
dyn Fn(VersionedTransaction, TransactionVerificationMode) -> Result<SanitizedTransaction>
|
||||||
|
+ Send
|
||||||
|
+ Sync,
|
||||||
|
>,
|
||||||
|
) -> Result<EntrySigVerificationState> {
|
||||||
let verify_func = {
|
let verify_func = {
|
||||||
let verification_mode = if skip_verification {
|
let mode = if skip_verification {
|
||||||
TransactionVerificationMode::HashOnly
|
TransactionVerificationMode::HashOnly
|
||||||
} else {
|
} else {
|
||||||
TransactionVerificationMode::FullVerification
|
TransactionVerificationMode::FullVerification
|
||||||
};
|
};
|
||||||
move |versioned_tx: VersionedTransaction| -> Result<SanitizedTransaction> {
|
|
||||||
verify(versioned_tx, verification_mode)
|
move |versioned_tx| verify(versioned_tx, mode)
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let entries = verify_transactions(entries, Arc::new(verify_func));
|
let entries = verify_transactions(entries, Arc::new(verify_func))?;
|
||||||
|
|
||||||
match entries {
|
Ok(EntrySigVerificationState {
|
||||||
Ok(entries_val) => {
|
|
||||||
return Ok(EntrySigVerificationState {
|
|
||||||
verification_status: EntryVerificationStatus::Success,
|
verification_status: EntryVerificationStatus::Success,
|
||||||
entries: Some(entries_val),
|
entries: Some(entries),
|
||||||
device_verification_data: DeviceSigVerificationData::Cpu(),
|
device_verification_data: DeviceSigVerificationData::Cpu(),
|
||||||
gpu_verify_duration_us: 0,
|
gpu_verify_duration_us: 0,
|
||||||
});
|
})
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
return Err(err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn start_verify_transactions_gpu(
|
||||||
|
entries: Vec<Entry>,
|
||||||
|
verify_recyclers: VerifyRecyclers,
|
||||||
|
verify: Arc<
|
||||||
|
dyn Fn(VersionedTransaction, TransactionVerificationMode) -> Result<SanitizedTransaction>
|
||||||
|
+ Send
|
||||||
|
+ Sync,
|
||||||
|
>,
|
||||||
|
) -> Result<EntrySigVerificationState> {
|
||||||
let verify_func = {
|
let verify_func = {
|
||||||
move |versioned_tx: VersionedTransaction| -> Result<SanitizedTransaction> {
|
move |versioned_tx: VersionedTransaction| -> Result<SanitizedTransaction> {
|
||||||
verify(
|
verify(
|
||||||
|
@ -468,9 +484,9 @@ pub fn start_verify_transactions(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let entries = verify_transactions(entries, Arc::new(verify_func));
|
|
||||||
match entries {
|
let entries = verify_transactions(entries, Arc::new(verify_func))?;
|
||||||
Ok(entries) => {
|
|
||||||
let entry_txs: Vec<&SanitizedTransaction> = entries
|
let entry_txs: Vec<&SanitizedTransaction> = entries
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|entry_type| match entry_type {
|
.filter_map(|entry_type| match entry_type {
|
||||||
|
@ -511,9 +527,12 @@ pub fn start_verify_transactions(
|
||||||
.into_par_iter()
|
.into_par_iter()
|
||||||
.map(|tx| tx.to_versioned_transaction());
|
.map(|tx| tx.to_versioned_transaction());
|
||||||
|
|
||||||
let res = packet_batch.par_iter_mut().zip(entry_tx_iter).all(|pair| {
|
let res = packet_batch
|
||||||
*pair.0.meta_mut() = Meta::default();
|
.par_iter_mut()
|
||||||
Packet::populate_packet(pair.0, None, &pair.1).is_ok()
|
.zip(entry_tx_iter)
|
||||||
|
.all(|(packet, tx)| {
|
||||||
|
*packet.meta_mut() = Meta::default();
|
||||||
|
Packet::populate_packet(packet, None, &tx).is_ok()
|
||||||
});
|
});
|
||||||
if res {
|
if res {
|
||||||
Ok(packet_batch)
|
Ok(packet_batch)
|
||||||
|
@ -544,6 +563,7 @@ pub fn start_verify_transactions(
|
||||||
(verified, verify_time.as_us())
|
(verified, verify_time.as_us())
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
Ok(EntrySigVerificationState {
|
Ok(EntrySigVerificationState {
|
||||||
verification_status: EntryVerificationStatus::Pending,
|
verification_status: EntryVerificationStatus::Pending,
|
||||||
entries: Some(entries),
|
entries: Some(entries),
|
||||||
|
@ -553,9 +573,6 @@ pub fn start_verify_transactions(
|
||||||
gpu_verify_duration_us: 0,
|
gpu_verify_duration_us: 0,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
Err(err) => Err(err),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn compare_hashes(computed_hash: Hash, ref_entry: &Entry) -> bool {
|
fn compare_hashes(computed_hash: Hash, ref_entry: &Entry) -> bool {
|
||||||
let actual = if !ref_entry.transactions.is_empty() {
|
let actual = if !ref_entry.transactions.is_empty() {
|
||||||
|
|
Loading…
Reference in New Issue