Skip to content

Commit 16b0a33

Browse files
committed
repair: remove CMR block_id requests
1 parent 64c51e4 commit 16b0a33

File tree

5 files changed

+87
-282
lines changed

5 files changed

+87
-282
lines changed

core/src/repair/malicious_repair_handler.rs

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use {
66
blockstore::Blockstore,
77
shred::{Nonce, SIZE_OF_DATA_SHRED_HEADERS},
88
},
9-
solana_perf::packet::{Packet, PacketBatch, PacketBatchRecycler},
9+
solana_perf::packet::Packet,
1010
std::{net::SocketAddr, sync::Arc},
1111
};
1212

@@ -64,17 +64,4 @@ impl RepairHandler for MaliciousRepairHandler {
6464
}
6565
repair_response_packet_from_bytes(shred, dest, nonce)
6666
}
67-
68-
fn run_orphan(
69-
&self,
70-
_recycler: &PacketBatchRecycler,
71-
_from_addr: &SocketAddr,
72-
_slot: Slot,
73-
_block_id: Option<Hash>,
74-
_max_responses: usize,
75-
_nonce: Nonce,
76-
) -> Option<PacketBatch> {
77-
// Malicious orphan response will come later
78-
None
79-
}
8067
}

core/src/repair/repair_handler.rs

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ use {
1515
solana_ledger::{
1616
ancestor_iterator::{AncestorIterator, AncestorIteratorWithHash},
1717
blockstore::Blockstore,
18-
blockstore_meta::BlockLocation,
1918
shred::Nonce,
2019
},
2120
solana_perf::packet::{Packet, PacketBatch, PacketBatchRecycler, PinnedPacketBatch},
@@ -61,30 +60,41 @@ pub trait RepairHandler {
6160
)
6261
}
6362

63+
fn run_window_request_for_block_id(
64+
&self,
65+
recycler: &PacketBatchRecycler,
66+
from_addr: &SocketAddr,
67+
slot: Slot,
68+
shred_index: u64,
69+
block_id: Hash,
70+
nonce: Nonce,
71+
) -> Option<PacketBatch> {
72+
self.run_window_request(
73+
recycler,
74+
from_addr,
75+
slot,
76+
shred_index,
77+
Some(block_id),
78+
nonce,
79+
)
80+
}
81+
6482
fn run_highest_window_request(
6583
&self,
6684
recycler: &PacketBatchRecycler,
6785
from_addr: &SocketAddr,
6886
slot: Slot,
6987
highest_index: u64,
70-
block_id: Option<Hash>,
7188
nonce: Nonce,
7289
) -> Option<PacketBatch> {
73-
let location = match block_id {
74-
None => BlockLocation::Original,
75-
Some(block_id) => self
76-
.blockstore()
77-
.get_block_location(slot, block_id)
78-
.expect("Unable to fetch block location from blockstore")?,
79-
};
8090
let meta = self
8191
.blockstore()
82-
.meta_from_location(slot, location)
92+
.meta(slot)
8393
.expect("Unable to fetch slot meta from blockstore")?;
8494
if meta.received > highest_index {
8595
// meta.received must be at least 1 by this point
8696
let packet =
87-
self.repair_response_packet(slot, meta.received - 1, block_id, from_addr, nonce)?;
97+
self.repair_response_packet(slot, meta.received - 1, None, from_addr, nonce)?;
8898
return Some(
8999
PinnedPacketBatch::new_unpinned_with_recycler_data(
90100
recycler,
@@ -102,10 +112,29 @@ pub trait RepairHandler {
102112
recycler: &PacketBatchRecycler,
103113
from_addr: &SocketAddr,
104114
slot: Slot,
105-
block_id: Option<Hash>,
106115
max_responses: usize,
107116
nonce: Nonce,
108-
) -> Option<PacketBatch>;
117+
) -> Option<PacketBatch> {
118+
let mut res =
119+
PinnedPacketBatch::new_unpinned_with_recycler(recycler, max_responses, "run_orphan");
120+
// Try to find the next "n" parent slots of the input slot
121+
let packets = std::iter::successors(self.blockstore().meta(slot).ok()?, |meta| {
122+
self.blockstore().meta(meta.parent_slot?).ok()?
123+
})
124+
.map_while(|meta| {
125+
repair_response::repair_response_packet(
126+
self.blockstore(),
127+
meta.slot,
128+
meta.received.checked_sub(1u64)?,
129+
from_addr,
130+
nonce,
131+
)
132+
});
133+
for packet in packets.take(max_responses) {
134+
res.push(packet);
135+
}
136+
(!res.is_empty()).then_some(res.into())
137+
}
109138

110139
fn run_ancestor_hashes(
111140
&self,

core/src/repair/repair_service.rs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,7 @@ pub struct RepairStats {
162162
pub shred: RepairStatsGroup,
163163
pub highest_shred: RepairStatsGroup,
164164
pub orphan: RepairStatsGroup,
165-
pub orphan_for_block_id: RepairStatsGroup,
166165
pub shred_for_block_id: RepairStatsGroup,
167-
pub highest_shred_for_block_id: RepairStatsGroup,
168166
pub get_best_orphans_us: u64,
169167
pub get_best_shreds_us: u64,
170168
}
@@ -174,18 +172,14 @@ impl RepairStats {
174172
let repair_total = self.shred.count
175173
+ self.highest_shred.count
176174
+ self.orphan.count
177-
+ self.orphan_for_block_id.count
178-
+ self.shred_for_block_id.count
179-
+ self.highest_shred_for_block_id.count;
175+
+ self.shred_for_block_id.count;
180176
let slot_to_count: Vec<_> = self
181177
.shred
182178
.slot_pubkeys
183179
.iter()
184180
.chain(self.highest_shred.slot_pubkeys.iter())
185181
.chain(self.orphan.slot_pubkeys.iter())
186-
.chain(self.orphan_for_block_id.slot_pubkeys.iter())
187182
.chain(self.shred_for_block_id.slot_pubkeys.iter())
188-
.chain(self.highest_shred_for_block_id.slot_pubkeys.iter())
189183
.map(|(slot, slot_repairs)| (slot, slot_repairs.pubkey_repairs.values().sum::<u64>()))
190184
.collect();
191185
info!("repair_stats: {slot_to_count:?}");
@@ -197,9 +191,7 @@ impl RepairStats {
197191
("shred-count", self.shred.count, i64),
198192
("highest-shred-count", self.highest_shred.count, i64),
199193
("orphan-count", self.orphan.count, i64),
200-
("orphan-for-block-id-count", self.orphan_for_block_id.count, i64),
201194
("shred-for-block-id-count", self.shred_for_block_id.count, i64),
202-
("highest-shred-for-block-id-count", self.highest_shred_for_block_id.count, i64),
203195
("shred-slot-max", nonzero_num(self.shred.max), Option<i64>),
204196
("shred-slot-min", nonzero_num(self.shred.min), Option<i64>),
205197
("repair-highest-slot", self.highest_shred.max, i64), // deprecated

0 commit comments

Comments
 (0)