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:
Illia Bobyr 2023-02-13 11:52:01 -08:00 committed by GitHub
parent dd9d6e308c
commit a425cab518
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 124 additions and 107 deletions

View File

@ -432,34 +432,50 @@ pub fn start_verify_transactions(
.is_some();
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 verification_mode = if skip_verification {
let mode = if skip_verification {
TransactionVerificationMode::HashOnly
} else {
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(entries_val) => {
return Ok(EntrySigVerificationState {
Ok(EntrySigVerificationState {
verification_status: EntryVerificationStatus::Success,
entries: Some(entries_val),
entries: Some(entries),
device_verification_data: DeviceSigVerificationData::Cpu(),
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 = {
move |versioned_tx: VersionedTransaction| -> Result<SanitizedTransaction> {
verify(
@ -468,9 +484,9 @@ pub fn start_verify_transactions(
)
}
};
let entries = verify_transactions(entries, Arc::new(verify_func));
match entries {
Ok(entries) => {
let entries = verify_transactions(entries, Arc::new(verify_func))?;
let entry_txs: Vec<&SanitizedTransaction> = entries
.iter()
.filter_map(|entry_type| match entry_type {
@ -511,9 +527,12 @@ pub fn start_verify_transactions(
.into_par_iter()
.map(|tx| tx.to_versioned_transaction());
let res = packet_batch.par_iter_mut().zip(entry_tx_iter).all(|pair| {
*pair.0.meta_mut() = Meta::default();
Packet::populate_packet(pair.0, None, &pair.1).is_ok()
let res = packet_batch
.par_iter_mut()
.zip(entry_tx_iter)
.all(|(packet, tx)| {
*packet.meta_mut() = Meta::default();
Packet::populate_packet(packet, None, &tx).is_ok()
});
if res {
Ok(packet_batch)
@ -544,6 +563,7 @@ pub fn start_verify_transactions(
(verified, verify_time.as_us())
})
.unwrap();
Ok(EntrySigVerificationState {
verification_status: EntryVerificationStatus::Pending,
entries: Some(entries),
@ -552,9 +572,6 @@ pub fn start_verify_transactions(
}),
gpu_verify_duration_us: 0,
})
}
Err(err) => Err(err),
}
}
fn compare_hashes(computed_hash: Hash, ref_entry: &Entry) -> bool {