Skip to content

Commit 7337615

Browse files
authored
Repair: remove calls to new_from_data (#7173)
* remove most calls to new_from_data from repair: test_verify_shred_response test_get_best_repair_shreds * add helpers in shredder.rs
1 parent a63481f commit 7337615

File tree

5 files changed

+81
-56
lines changed

5 files changed

+81
-56
lines changed

core/src/repair/outstanding_requests.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,8 @@ pub struct RequestStatus<T> {
8585
#[cfg(test)]
8686
pub(crate) mod tests {
8787
use {
88-
super::*,
89-
crate::repair::serve_repair::ShredRepairType,
90-
solana_ledger::shred::{Shred, ShredFlags},
91-
solana_time_utils::timestamp,
88+
super::*, crate::repair::serve_repair::ShredRepairType, solana_keypair::Keypair,
89+
solana_ledger::shred::Shredder, solana_time_utils::timestamp,
9290
};
9391

9492
#[test]
@@ -109,7 +107,8 @@ pub(crate) mod tests {
109107
let repair_type = ShredRepairType::Orphan(9);
110108
let mut outstanding_requests = OutstandingRequests::default();
111109
let nonce = outstanding_requests.add_request(repair_type, timestamp());
112-
let shred = Shred::new_from_data(0, 0, 0, &[], ShredFlags::empty(), 0, 0, 0);
110+
let keypair = Keypair::new();
111+
let shred = Shredder::single_shred_for_tests(0, &keypair);
113112

114113
let expire_timestamp = outstanding_requests
115114
.requests
@@ -128,8 +127,8 @@ pub(crate) mod tests {
128127
let repair_type = ShredRepairType::Orphan(9);
129128
let mut outstanding_requests = OutstandingRequests::default();
130129
let nonce = outstanding_requests.add_request(repair_type, timestamp());
131-
132-
let shred = Shred::new_from_data(0, 0, 0, &[], ShredFlags::empty(), 0, 0, 0);
130+
let keypair = Keypair::new();
131+
let shred = Shredder::single_shred_for_tests(0, &keypair);
133132
let mut expire_timestamp = outstanding_requests
134133
.requests
135134
.get(&nonce)

core/src/repair/repair_response.rs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ mod test {
4848
super::*,
4949
solana_keypair::Keypair,
5050
solana_ledger::{
51-
shred::{Shred, ShredFlags},
51+
shred::Shredder,
5252
sigverify_shreds::{verify_shred_cpu, LruCache},
5353
},
5454
solana_packet::PacketFlags,
@@ -63,19 +63,9 @@ mod test {
6363
fn run_test_sigverify_shred_cpu_repair(slot: Slot) {
6464
solana_logger::setup();
6565
let cache = RwLock::new(LruCache::new(/*capacity:*/ 128));
66-
let mut shred = Shred::new_from_data(
67-
slot,
68-
0xc0de,
69-
0xdead,
70-
&[1, 2, 3, 4],
71-
ShredFlags::LAST_SHRED_IN_SLOT,
72-
0,
73-
0,
74-
0xc0de,
75-
);
76-
assert_eq!(shred.slot(), slot);
7766
let keypair = Keypair::new();
78-
shred.sign(&keypair);
67+
let shred = Shredder::single_shred_for_tests(slot, &keypair);
68+
7969
trace!("signature {}", shred.signature());
8070
let nonce = 9;
8171
let mut packet = repair_response_packet_from_bytes(

core/src/repair/repair_weighted_traversal.rs

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,10 @@ pub mod test {
142142
super::*,
143143
crate::repair::repair_service::sleep_shred_deferment_period,
144144
solana_hash::Hash,
145+
solana_keypair::Keypair,
145146
solana_ledger::{
146147
get_tmp_ledger_path,
147-
shred::{Shred, ShredFlags},
148+
shred::{ProcessShredsStats, ReedSolomonCache, Shred, Shredder},
148149
},
149150
solana_runtime::bank_utils,
150151
trees::tr,
@@ -281,22 +282,24 @@ pub mod test {
281282
repairs = vec![];
282283
outstanding_repairs = HashMap::new();
283284
slot_meta_cache = HashMap::default();
285+
let keypair = Keypair::new();
286+
let reed_solomon_cache = ReedSolomonCache::default();
287+
284288
let completed_shreds: Vec<Shred> = [0, 2, 4, 6]
285289
.iter()
286-
.map(|slot| {
287-
let parent_offset = u16::from(*slot != 0);
288-
let shred = Shred::new_from_data(
289-
*slot,
290-
last_shred as u32, // index
291-
parent_offset,
292-
&[0u8; 8], // data
293-
ShredFlags::LAST_SHRED_IN_SLOT,
294-
8, // reference_tick
295-
0, // version
296-
last_shred as u32, // fec_set_index
290+
.flat_map(|slot| {
291+
let shredder = Shredder::new(*slot, slot.saturating_sub(1), 0, 42).unwrap();
292+
let (shreds, _) = shredder.entries_to_merkle_shreds_for_tests(
293+
&keypair,
294+
&[],
295+
true,
296+
Some(Hash::default()),
297+
last_shred as u32,
298+
last_shred as u32,
299+
&reed_solomon_cache,
300+
&mut ProcessShredsStats::default(),
297301
);
298-
assert!(shred.sanitize().is_ok());
299-
shred
302+
shreds
300303
})
301304
.collect();
302305
blockstore

core/src/repair/serve_repair.rs

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1346,7 +1346,9 @@ mod tests {
13461346
blockstore_processor::fill_blockstore_slot_with_ticks,
13471347
genesis_utils::{create_genesis_config, GenesisConfigInfo},
13481348
get_tmp_ledger_path_auto_delete,
1349-
shred::{max_ticks_per_n_shreds, Shred, ShredFlags},
1349+
shred::{
1350+
max_ticks_per_n_shreds, ProcessShredsStats, ReedSolomonCache, Shred, Shredder,
1351+
},
13501352
},
13511353
solana_perf::packet::{deserialize_from_with_limit, Packet, PacketFlags, PacketRef},
13521354
solana_pubkey::Pubkey,
@@ -1368,19 +1370,8 @@ mod tests {
13681370

13691371
#[test]
13701372
fn test_deserialize_shred_as_ping() {
1371-
let data_buf = vec![7u8, 44]; // REPAIR_RESPONSE_SERIALIZED_PING_BYTES - SIZE_OF_DATA_SHRED_HEADERS
13721373
let keypair = Keypair::new();
1373-
let mut shred = Shred::new_from_data(
1374-
123, // slot
1375-
456, // index
1376-
111, // parent_offset
1377-
&data_buf,
1378-
ShredFlags::empty(),
1379-
222, // reference_tick
1380-
333, // version
1381-
444, // fec_set_index
1382-
);
1383-
shred.sign(&keypair);
1374+
let shred = Shredder::single_shred_for_tests(123, &keypair);
13841375
let mut pkt = Packet::default();
13851376
shred.copy_to_packet(&mut pkt);
13861377
pkt.meta_mut().size = REPAIR_RESPONSE_SERIALIZED_PING_BYTES;
@@ -1822,26 +1813,37 @@ mod tests {
18221813
}
18231814

18241815
#[test]
1825-
fn test_run_window_request() {
1826-
run_window_request(2, 9);
1827-
}
1828-
18291816
/// test window requests respond with the right shred, and do not overrun
1830-
pub fn run_window_request(slot: Slot, nonce: Nonce) {
1817+
fn test_run_window_request() {
1818+
let slot = 2;
1819+
let nonce = 9;
18311820
let recycler = PacketBatchRecycler::default();
18321821
solana_logger::setup();
18331822
let ledger_path = get_tmp_ledger_path_auto_delete!();
18341823
let blockstore = Arc::new(Blockstore::open(ledger_path.path()).unwrap());
18351824
let handler = StandardRepairHandler::new(blockstore.clone());
18361825
let rv = handler.run_window_request(&recycler, &socketaddr_any!(), slot, 0, nonce);
18371826
assert!(rv.is_none());
1838-
let shred = Shred::new_from_data(slot, 1, 1, &[], ShredFlags::empty(), 0, 2, 0);
1827+
let shredder = Shredder::new(slot, slot - 1, 0, 2).unwrap();
1828+
let keypair = Keypair::new();
1829+
let reed_solomon_cache = ReedSolomonCache::default();
1830+
let index = 1;
1831+
let (mut shreds, _) = shredder.entries_to_merkle_shreds_for_tests(
1832+
&keypair,
1833+
&[],
1834+
true,
1835+
Some(Hash::default()),
1836+
index as u32,
1837+
index as u32,
1838+
&reed_solomon_cache,
1839+
&mut ProcessShredsStats::default(),
1840+
);
1841+
shreds.truncate(1);
18391842

18401843
blockstore
1841-
.insert_shreds(vec![shred], None, false)
1844+
.insert_shreds(shreds, None, false)
18421845
.expect("Expect successful ledger write");
18431846

1844-
let index = 1;
18451847
let mut rv = handler
18461848
.run_window_request(&recycler, &socketaddr_any!(), slot, index, nonce)
18471849
.expect("packets");
@@ -2262,7 +2264,20 @@ mod tests {
22622264
#[test]
22632265
fn test_verify_shred_response() {
22642266
fn new_test_data_shred(slot: Slot, index: u32) -> Shred {
2265-
Shred::new_from_data(slot, index, 1, &[], ShredFlags::empty(), 0, 0, 0)
2267+
let shredder = Shredder::new(slot, slot.saturating_sub(1), 0, 0).unwrap();
2268+
let keypair = Keypair::new();
2269+
let reed_solomon_cache = ReedSolomonCache::default();
2270+
let (mut shreds, _) = shredder.entries_to_merkle_shreds_for_tests(
2271+
&keypair,
2272+
&[],
2273+
true,
2274+
Some(Hash::default()),
2275+
0,
2276+
0,
2277+
&reed_solomon_cache,
2278+
&mut ProcessShredsStats::default(),
2279+
);
2280+
shreds.remove(index as usize)
22662281
}
22672282
let repair = ShredRepairType::Orphan(9);
22682283
// Ensure new options are added to this test

ledger/src/shredder.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,24 @@ impl Shredder {
194194
Ok(data)
195195
}
196196
}
197+
/// Produce a single shred with no payload
198+
/// for use in tests and such
199+
#[cfg(feature = "dev-context-only-utils")]
200+
pub fn single_shred_for_tests(slot: Slot, keypair: &Keypair) -> Shred {
201+
let shredder = Shredder::new(slot, slot.saturating_sub(1), 0, 42).unwrap();
202+
let reed_solomon_cache = ReedSolomonCache::default();
203+
let (mut shreds, _) = shredder.entries_to_merkle_shreds_for_tests(
204+
keypair,
205+
&[],
206+
true,
207+
Some(Hash::default()),
208+
0,
209+
0,
210+
&reed_solomon_cache,
211+
&mut ProcessShredsStats::default(),
212+
);
213+
shreds.pop().unwrap()
214+
}
197215
}
198216

199217
impl ReedSolomonCache {

0 commit comments

Comments
 (0)