Add tracer key for tracing transaction path through the network (#15732)
This commit is contained in:
@ -337,32 +337,23 @@ impl ClusterInfoVoteListener {
|
||||
votes: Vec<Transaction>,
|
||||
labels: Vec<CrdsValueLabel>,
|
||||
) -> (Vec<Transaction>, Vec<(CrdsValueLabel, Slot, Packets)>) {
|
||||
let msgs = packet::to_packets_chunked(&votes, 1);
|
||||
let r = sigverify::ed25519_verify_cpu(&msgs);
|
||||
let mut msgs = packet::to_packets_chunked(&votes, 1);
|
||||
sigverify::ed25519_verify_cpu(&mut msgs);
|
||||
|
||||
assert_eq!(
|
||||
r.iter()
|
||||
.map(|packets_results| packets_results.len())
|
||||
.sum::<usize>(),
|
||||
votes.len()
|
||||
);
|
||||
let (vote_txs, packets) = izip!(labels.into_iter(), votes.into_iter(), msgs,)
|
||||
.filter_map(|(label, vote, packet)| {
|
||||
let slot = vote_transaction::parse_vote_transaction(&vote)
|
||||
.and_then(|(_, vote, _)| vote.slots.last().copied())?;
|
||||
|
||||
let (vote_txs, packets) = izip!(
|
||||
labels.into_iter(),
|
||||
votes.into_iter(),
|
||||
r.iter().flatten(),
|
||||
msgs,
|
||||
)
|
||||
.filter_map(|(label, vote, verify_result, packet)| {
|
||||
let slot = vote_transaction::parse_vote_transaction(&vote)
|
||||
.and_then(|(_, vote, _)| vote.slots.last().copied())?;
|
||||
if *verify_result != 0 {
|
||||
Some((vote, (label, slot, packet)))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.unzip();
|
||||
// to_packets_chunked() above split into 1 packet long chunks
|
||||
assert_eq!(packet.packets.len(), 1);
|
||||
if !packet.packets[0].meta.discard {
|
||||
Some((vote, (label, slot, packet)))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.unzip();
|
||||
(vote_txs, packets)
|
||||
}
|
||||
|
||||
|
@ -31,34 +31,7 @@ impl Default for TransactionSigVerifier {
|
||||
|
||||
impl SigVerifier for TransactionSigVerifier {
|
||||
fn verify_batch(&self, mut batch: Vec<Packets>) -> Vec<Packets> {
|
||||
let r = sigverify::ed25519_verify(&batch, &self.recycler, &self.recycler_out);
|
||||
mark_disabled(&mut batch, &r);
|
||||
sigverify::ed25519_verify(&mut batch, &self.recycler, &self.recycler_out);
|
||||
batch
|
||||
}
|
||||
}
|
||||
|
||||
pub fn mark_disabled(batches: &mut Vec<Packets>, r: &[Vec<u8>]) {
|
||||
batches.iter_mut().zip(r).for_each(|(b, v)| {
|
||||
b.packets
|
||||
.iter_mut()
|
||||
.zip(v)
|
||||
.for_each(|(p, f)| p.meta.discard = *f == 0)
|
||||
});
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use solana_perf::packet::Packet;
|
||||
|
||||
#[test]
|
||||
fn test_mark_disabled() {
|
||||
let mut batch = Packets::default();
|
||||
batch.packets.push(Packet::default());
|
||||
let mut batches: Vec<Packets> = vec![batch];
|
||||
mark_disabled(&mut batches, &[vec![0]]);
|
||||
assert_eq!(batches[0].packets[0].meta.discard, true);
|
||||
mark_disabled(&mut batches, &[vec![1]]);
|
||||
assert_eq!(batches[0].packets[0].meta.discard, false);
|
||||
}
|
||||
}
|
||||
|
@ -4,8 +4,11 @@ use crate::sigverify_stage::SigVerifier;
|
||||
use solana_ledger::leader_schedule_cache::LeaderScheduleCache;
|
||||
use solana_ledger::shred::{OFFSET_OF_SHRED_SLOT, SIZE_OF_SHRED_SLOT};
|
||||
use solana_ledger::sigverify_shreds::verify_shreds_gpu;
|
||||
use solana_perf::packet::{limited_deserialize, Packets};
|
||||
use solana_perf::recycler_cache::RecyclerCache;
|
||||
use solana_perf::{
|
||||
self,
|
||||
packet::{limited_deserialize, Packets},
|
||||
recycler_cache::RecyclerCache,
|
||||
};
|
||||
use solana_runtime::bank_forks::BankForks;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::sync::{Arc, RwLock};
|
||||
@ -67,7 +70,7 @@ impl SigVerifier for ShredSigVerifier {
|
||||
leader_slots.insert(std::u64::MAX, [0u8; 32]);
|
||||
|
||||
let r = verify_shreds_gpu(&batches, &leader_slots, &self.recycler_cache);
|
||||
sigverify::mark_disabled(&mut batches, &r);
|
||||
solana_perf::sigverify::mark_disabled(&mut batches, &r);
|
||||
batches
|
||||
}
|
||||
}
|
||||
|
@ -45,8 +45,7 @@ pub struct DisabledSigVerifier {}
|
||||
|
||||
impl SigVerifier for DisabledSigVerifier {
|
||||
fn verify_batch(&self, mut batch: Vec<Packets>) -> Vec<Packets> {
|
||||
let r = sigverify::ed25519_verify_disabled(&batch);
|
||||
sigverify::mark_disabled(&mut batch, &r);
|
||||
sigverify::ed25519_verify_disabled(&mut batch);
|
||||
batch
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user