Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.

Commit 81231a8

Browse files
committed
adds support for different variants of ShredCode and ShredData
The commit implements two new types: pub enum ShredCode { Legacy(legacy::ShredCode), } pub enum ShredData { Legacy(legacy::ShredData), } Following commits will extend these types by adding merkle variants: pub enum ShredCode { Legacy(legacy::ShredCode), Merkle(merkle::ShredCode), } pub enum ShredData { Legacy(legacy::ShredData), Merkle(merkle::ShredData), }
1 parent a913068 commit 81231a8

15 files changed

+544
-312
lines changed

core/benches/shredder.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use {
99
solana_entry::entry::{create_ticks, Entry},
1010
solana_ledger::shred::{
1111
max_entries_per_n_shred, max_ticks_per_n_shreds, ProcessShredsStats, Shred, ShredFlags,
12-
Shredder, MAX_DATA_SHREDS_PER_FEC_BLOCK, SIZE_OF_DATA_SHRED_PAYLOAD,
12+
Shredder, LEGACY_SHRED_DATA_CAPACITY, MAX_DATA_SHREDS_PER_FEC_BLOCK,
1313
},
1414
solana_perf::test_tx,
1515
solana_sdk::{hash::Hash, packet::PACKET_DATA_SIZE, signature::Keypair},
@@ -38,12 +38,11 @@ fn make_large_unchained_entries(txs_per_entry: u64, num_entries: u64) -> Vec<Ent
3838
}
3939

4040
fn make_shreds(num_shreds: usize) -> Vec<Shred> {
41-
let shred_size = SIZE_OF_DATA_SHRED_PAYLOAD;
4241
let txs_per_entry = 128;
4342
let num_entries = max_entries_per_n_shred(
4443
&make_test_entry(txs_per_entry),
4544
2 * num_shreds as u64,
46-
Some(shred_size),
45+
Some(LEGACY_SHRED_DATA_CAPACITY),
4746
);
4847
let entries = make_large_unchained_entries(txs_per_entry, num_entries);
4948
let shredder = Shredder::new(1, 0, 0, 0).unwrap();
@@ -73,10 +72,10 @@ fn make_concatenated_shreds(num_shreds: usize) -> Vec<u8> {
7372
#[bench]
7473
fn bench_shredder_ticks(bencher: &mut Bencher) {
7574
let kp = Keypair::new();
76-
let shred_size = SIZE_OF_DATA_SHRED_PAYLOAD;
75+
let shred_size = LEGACY_SHRED_DATA_CAPACITY;
7776
let num_shreds = ((1000 * 1000) + (shred_size - 1)) / shred_size;
7877
// ~1Mb
79-
let num_ticks = max_ticks_per_n_shreds(1, Some(SIZE_OF_DATA_SHRED_PAYLOAD)) * num_shreds as u64;
78+
let num_ticks = max_ticks_per_n_shreds(1, Some(LEGACY_SHRED_DATA_CAPACITY)) * num_shreds as u64;
8079
let entries = create_ticks(num_ticks, 0, Hash::default());
8180
bencher.iter(|| {
8281
let shredder = Shredder::new(1, 0, 0, 0).unwrap();
@@ -87,7 +86,7 @@ fn bench_shredder_ticks(bencher: &mut Bencher) {
8786
#[bench]
8887
fn bench_shredder_large_entries(bencher: &mut Bencher) {
8988
let kp = Keypair::new();
90-
let shred_size = SIZE_OF_DATA_SHRED_PAYLOAD;
89+
let shred_size = LEGACY_SHRED_DATA_CAPACITY;
9190
let num_shreds = ((1000 * 1000) + (shred_size - 1)) / shred_size;
9291
let txs_per_entry = 128;
9392
let num_entries = max_entries_per_n_shred(
@@ -106,7 +105,7 @@ fn bench_shredder_large_entries(bencher: &mut Bencher) {
106105
#[bench]
107106
fn bench_deshredder(bencher: &mut Bencher) {
108107
let kp = Keypair::new();
109-
let shred_size = SIZE_OF_DATA_SHRED_PAYLOAD;
108+
let shred_size = LEGACY_SHRED_DATA_CAPACITY;
110109
// ~10Mb
111110
let num_shreds = ((10000 * 1000) + (shred_size - 1)) / shred_size;
112111
let num_ticks = max_ticks_per_n_shreds(1, Some(shred_size)) * num_shreds as u64;
@@ -121,7 +120,7 @@ fn bench_deshredder(bencher: &mut Bencher) {
121120

122121
#[bench]
123122
fn bench_deserialize_hdr(bencher: &mut Bencher) {
124-
let data = vec![0; SIZE_OF_DATA_SHRED_PAYLOAD];
123+
let data = vec![0; LEGACY_SHRED_DATA_CAPACITY];
125124

126125
let shred = Shred::new_from_data(2, 1, 1, &data, ShredFlags::LAST_SHRED_IN_SLOT, 0, 0, 1);
127126

core/src/replay_stage.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3180,7 +3180,7 @@ pub(crate) mod tests {
31803180
create_new_tmp_ledger,
31813181
genesis_utils::{create_genesis_config, create_genesis_config_with_leader},
31823182
get_tmp_ledger_path,
3183-
shred::{Shred, ShredFlags, SIZE_OF_DATA_SHRED_PAYLOAD},
3183+
shred::{Shred, ShredFlags, LEGACY_SHRED_DATA_CAPACITY},
31843184
},
31853185
solana_rpc::{
31863186
optimistically_confirmed_bank_tracker::OptimisticallyConfirmedBank,
@@ -3779,7 +3779,7 @@ pub(crate) mod tests {
37793779
fn test_dead_fork_entry_deserialize_failure() {
37803780
// Insert entry that causes deserialization failure
37813781
let res = check_dead_fork(|_, bank| {
3782-
let gibberish = [0xa5u8; SIZE_OF_DATA_SHRED_PAYLOAD];
3782+
let gibberish = [0xa5u8; LEGACY_SHRED_DATA_CAPACITY];
37833783
let parent_offset = bank.slot() - bank.parent_slot();
37843784
let shred = Shred::new_from_data(
37853785
bank.slot(),

core/src/sigverify_shreds.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ impl ShredSigVerifier {
4343
batches
4444
.iter()
4545
.flat_map(PacketBatch::iter)
46-
.map(shred::layout::get_shred)
46+
.filter_map(shred::layout::get_shred)
4747
.filter_map(shred::layout::get_slot)
4848
.collect()
4949
}

ledger/benches/sigverify_shreds.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
extern crate test;
44
use {
55
solana_ledger::{
6-
shred::{Shred, ShredFlags, SIZE_OF_DATA_SHRED_PAYLOAD},
6+
shred::{Shred, ShredFlags, LEGACY_SHRED_DATA_CAPACITY},
77
sigverify_shreds::{sign_shreds_cpu, sign_shreds_gpu, sign_shreds_gpu_pinned_keypair},
88
},
99
solana_perf::{
@@ -29,7 +29,7 @@ fn bench_sigverify_shreds_sign_gpu(bencher: &mut Bencher) {
2929
slot,
3030
0xc0de,
3131
0xdead,
32-
&[5; SIZE_OF_DATA_SHRED_PAYLOAD],
32+
&[5; LEGACY_SHRED_DATA_CAPACITY],
3333
ShredFlags::LAST_SHRED_IN_SLOT,
3434
1,
3535
2,
@@ -60,7 +60,7 @@ fn bench_sigverify_shreds_sign_cpu(bencher: &mut Bencher) {
6060
slot,
6161
0xc0de,
6262
0xdead,
63-
&[5; SIZE_OF_DATA_SHRED_PAYLOAD],
63+
&[5; LEGACY_SHRED_DATA_CAPACITY],
6464
ShredFlags::LAST_SHRED_IN_SLOT,
6565
1,
6666
2,

ledger/src/blockstore.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ use {
1414
},
1515
leader_schedule_cache::LeaderScheduleCache,
1616
next_slots_iterator::NextSlotsIterator,
17-
shred::{self, max_ticks_per_n_shreds, ErasureSetId, Shred, ShredId, ShredType, Shredder},
17+
shred::{
18+
self, max_ticks_per_n_shreds, ErasureSetId, Shred, ShredData, ShredId, ShredType,
19+
Shredder,
20+
},
1821
slot_stats::{ShredSource, SlotsStats},
1922
},
2023
bincode::deserialize,
@@ -1556,7 +1559,7 @@ impl Blockstore {
15561559

15571560
pub fn get_data_shred(&self, slot: Slot, index: u64) -> Result<Option<Vec<u8>>> {
15581561
let shred = self.data_shred_cf.get_bytes((slot, index))?;
1559-
let shred = shred.map(Shred::resize_stored_shred).transpose();
1562+
let shred = shred.map(ShredData::resize_stored_shred).transpose();
15601563
shred.map_err(|err| {
15611564
let err = format!("Invalid stored shred: {}", err);
15621565
let err = Box::new(bincode::ErrorKind::Custom(err));

0 commit comments

Comments
 (0)