removes redundant Option<&Arc<...>> wrapper for Blockstore in serve-repair

This commit is contained in:
behzad nouri 2022-08-01 14:46:45 -04:00
parent 6423da0218
commit ec36f0c5df
4 changed files with 65 additions and 88 deletions

View File

@ -940,7 +940,7 @@ mod test {
None,
);
let t_listen = responder_serve_repair.listen(
Some(blockstore),
blockstore,
requests_receiver,
response_sender,
exit.clone(),

View File

@ -356,7 +356,7 @@ impl ServeRepair {
fn handle_repair(
recycler: &PacketBatchRecycler,
from_addr: &SocketAddr,
blockstore: Option<&Arc<Blockstore>>,
blockstore: &Blockstore,
request: RepairProtocol,
stats: &mut ServeRepairStats,
ping_cache: &mut PingCache,
@ -480,7 +480,7 @@ impl ServeRepair {
&self,
ping_cache: &mut PingCache,
recycler: &PacketBatchRecycler,
blockstore: Option<&Arc<Blockstore>>,
blockstore: &Blockstore,
requests_receiver: &PacketBatchReceiver,
response_sender: &PacketBatchSender,
stats: &mut ServeRepairStats,
@ -569,7 +569,7 @@ impl ServeRepair {
pub fn listen(
self,
blockstore: Option<Arc<Blockstore>>,
blockstore: Arc<Blockstore>,
requests_receiver: PacketBatchReceiver,
response_sender: PacketBatchSender,
exit: Arc<AtomicBool>,
@ -591,7 +591,7 @@ impl ServeRepair {
let result = self.run_listen(
&mut ping_cache,
&recycler,
blockstore.as_ref(),
&blockstore,
&requests_receiver,
&response_sender,
&mut stats,
@ -731,7 +731,7 @@ impl ServeRepair {
&self,
ping_cache: &mut PingCache,
recycler: &PacketBatchRecycler,
blockstore: Option<&Arc<Blockstore>>,
blockstore: &Blockstore,
packet_batch: PacketBatch,
response_sender: &PacketBatchSender,
root_bank: &Bank,
@ -1093,44 +1093,36 @@ impl ServeRepair {
fn run_window_request(
recycler: &PacketBatchRecycler,
from_addr: &SocketAddr,
blockstore: Option<&Arc<Blockstore>>,
blockstore: &Blockstore,
slot: Slot,
shred_index: u64,
nonce: Nonce,
) -> Option<PacketBatch> {
if let Some(blockstore) = blockstore {
// Try to find the requested index in one of the slots
let packet = repair_response::repair_response_packet(
blockstore,
slot,
shred_index,
from_addr,
nonce,
);
// Try to find the requested index in one of the slots
let packet = repair_response::repair_response_packet(
blockstore,
slot,
shred_index,
from_addr,
nonce,
)?;
if let Some(packet) = packet {
inc_new_counter_debug!("serve_repair-window-request-ledger", 1);
return Some(PacketBatch::new_unpinned_with_recycler_data(
recycler,
"run_window_request",
vec![packet],
));
}
}
inc_new_counter_debug!("serve_repair-window-request-fail", 1);
None
inc_new_counter_debug!("serve_repair-window-request-ledger", 1);
Some(PacketBatch::new_unpinned_with_recycler_data(
recycler,
"run_window_request",
vec![packet],
))
}
fn run_highest_window_request(
recycler: &PacketBatchRecycler,
from_addr: &SocketAddr,
blockstore: Option<&Arc<Blockstore>>,
blockstore: &Blockstore,
slot: Slot,
highest_index: u64,
nonce: Nonce,
) -> Option<PacketBatch> {
let blockstore = blockstore?;
// Try to find the requested index in one of the slots
let meta = blockstore.meta(slot).ok()??;
if meta.received > highest_index {
@ -1154,37 +1146,35 @@ impl ServeRepair {
fn run_orphan(
recycler: &PacketBatchRecycler,
from_addr: &SocketAddr,
blockstore: Option<&Arc<Blockstore>>,
blockstore: &Blockstore,
mut slot: Slot,
max_responses: usize,
nonce: Nonce,
) -> Option<PacketBatch> {
let mut res =
PacketBatch::new_unpinned_with_recycler(recycler.clone(), max_responses, "run_orphan");
if let Some(blockstore) = blockstore {
// Try to find the next "n" parent slots of the input slot
while let Ok(Some(meta)) = blockstore.meta(slot) {
if meta.received == 0 {
break;
}
let packet = repair_response::repair_response_packet(
blockstore,
slot,
meta.received - 1,
from_addr,
nonce,
);
if let Some(packet) = packet {
res.push(packet);
} else {
break;
}
// Try to find the next "n" parent slots of the input slot
while let Ok(Some(meta)) = blockstore.meta(slot) {
if meta.received == 0 {
break;
}
let packet = repair_response::repair_response_packet(
blockstore,
slot,
meta.received - 1,
from_addr,
nonce,
);
if let Some(packet) = packet {
res.push(packet);
} else {
break;
}
if meta.parent_slot.is_some() && res.len() < max_responses {
slot = meta.parent_slot.unwrap();
} else {
break;
}
if meta.parent_slot.is_some() && res.len() < max_responses {
slot = meta.parent_slot.unwrap();
} else {
break;
}
}
if res.is_empty() {
@ -1196,11 +1186,10 @@ impl ServeRepair {
fn run_ancestor_hashes(
recycler: &PacketBatchRecycler,
from_addr: &SocketAddr,
blockstore: Option<&Arc<Blockstore>>,
blockstore: &Blockstore,
slot: Slot,
nonce: Nonce,
) -> Option<PacketBatch> {
let blockstore = blockstore?;
let ancestor_slot_hashes = if blockstore.is_duplicate_confirmed(slot) {
let ancestor_iterator =
AncestorIteratorWithHash::from(AncestorIterator::new_inclusive(slot, blockstore));
@ -1635,7 +1624,7 @@ mod tests {
let rv = ServeRepair::run_highest_window_request(
&recycler,
&socketaddr_any!(),
Some(&blockstore),
&blockstore,
0,
0,
nonce,
@ -1654,7 +1643,7 @@ mod tests {
let rv = ServeRepair::run_highest_window_request(
&recycler,
&socketaddr_any!(),
Some(&blockstore),
&blockstore,
slot,
index,
nonce,
@ -1678,7 +1667,7 @@ mod tests {
let rv = ServeRepair::run_highest_window_request(
&recycler,
&socketaddr_any!(),
Some(&blockstore),
&blockstore,
slot,
index + 1,
nonce,
@ -1704,7 +1693,7 @@ mod tests {
let rv = ServeRepair::run_window_request(
&recycler,
&socketaddr_any!(),
Some(&blockstore),
&blockstore,
slot,
0,
nonce,
@ -1720,7 +1709,7 @@ mod tests {
let rv = ServeRepair::run_window_request(
&recycler,
&socketaddr_any!(),
Some(&blockstore),
&blockstore,
slot,
index,
nonce,
@ -1855,14 +1844,8 @@ mod tests {
let ledger_path = get_tmp_ledger_path!();
{
let blockstore = Arc::new(Blockstore::open(&ledger_path).unwrap());
let rv = ServeRepair::run_orphan(
&recycler,
&socketaddr_any!(),
Some(&blockstore),
slot,
0,
nonce,
);
let rv =
ServeRepair::run_orphan(&recycler, &socketaddr_any!(), &blockstore, slot, 0, nonce);
assert!(rv.is_none());
// Create slots [slot, slot + num_slots) with 5 shreds apiece
@ -1876,7 +1859,7 @@ mod tests {
let rv = ServeRepair::run_orphan(
&recycler,
&socketaddr_any!(),
Some(&blockstore),
&blockstore,
slot + num_slots,
5,
nonce,
@ -1888,7 +1871,7 @@ mod tests {
let rv: Vec<_> = ServeRepair::run_orphan(
&recycler,
&socketaddr_any!(),
Some(&blockstore),
&blockstore,
slot + num_slots - 1,
5,
nonce,
@ -1954,18 +1937,12 @@ mod tests {
// Orphan request for slot 2 should only return slot 1 since
// calling `repair_response_packet` on slot 1's shred will
// be corrupted
let rv: Vec<_> = ServeRepair::run_orphan(
&recycler,
&socketaddr_any!(),
Some(&blockstore),
2,
5,
nonce,
)
.expect("run_orphan packets")
.iter()
.cloned()
.collect();
let rv: Vec<_> =
ServeRepair::run_orphan(&recycler, &socketaddr_any!(), &blockstore, 2, 5, nonce)
.expect("run_orphan packets")
.iter()
.cloned()
.collect();
// Verify responses
let expected = vec![repair_response::repair_response_packet(
@ -2011,7 +1988,7 @@ mod tests {
let rv = ServeRepair::run_ancestor_hashes(
&recycler,
&socketaddr_any!(),
Some(&blockstore),
&blockstore,
slot + num_slots,
nonce,
)
@ -2026,7 +2003,7 @@ mod tests {
let rv = ServeRepair::run_ancestor_hashes(
&recycler,
&socketaddr_any!(),
Some(&blockstore),
&blockstore,
slot + num_slots - 1,
nonce,
)
@ -2048,7 +2025,7 @@ mod tests {
let rv = ServeRepair::run_ancestor_hashes(
&recycler,
&socketaddr_any!(),
Some(&blockstore),
&blockstore,
slot + num_slots - 1,
nonce,
)

View File

@ -21,7 +21,7 @@ pub struct ServeRepairService {
impl ServeRepairService {
pub fn new(
serve_repair: ServeRepair,
blockstore: Option<Arc<Blockstore>>,
blockstore: Arc<Blockstore>,
serve_repair_socket: UdpSocket,
socket_addr_space: SocketAddrSpace,
stats_reporter_sender: Sender<Box<dyn FnOnce() + Send>>,

View File

@ -886,7 +886,7 @@ impl Validator {
let serve_repair = ServeRepair::new(cluster_info.clone(), bank_forks.clone());
let serve_repair_service = ServeRepairService::new(
serve_repair,
Some(blockstore.clone()),
blockstore.clone(),
node.sockets.serve_repair,
socket_addr_space,
stats_reporter_sender,