@ -356,16 +356,19 @@ impl Shredder {
|
|||||||
});
|
});
|
||||||
let unsigned_coding_shred_start = self.shreds.len();
|
let unsigned_coding_shred_start = self.shreds.len();
|
||||||
|
|
||||||
self.generate_coding_shreds();
|
if self.fec_rate > 0.0 {
|
||||||
let signature_offset = *SIZE_OF_SHRED_TYPE;
|
self.generate_coding_shreds();
|
||||||
PAR_THREAD_POOL.with(|thread_pool| {
|
let signature_offset = *SIZE_OF_SHRED_TYPE;
|
||||||
thread_pool.borrow().install(|| {
|
PAR_THREAD_POOL.with(|thread_pool| {
|
||||||
self.shreds[unsigned_coding_shred_start..]
|
thread_pool.borrow().install(|| {
|
||||||
.par_iter_mut()
|
self.shreds[unsigned_coding_shred_start..]
|
||||||
.for_each(|d| Self::sign_shred(&signer, d, signature_offset));
|
.par_iter_mut()
|
||||||
})
|
.for_each(|d| Self::sign_shred(&signer, d, signature_offset));
|
||||||
});
|
})
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
self.fec_set_index = self.index;
|
||||||
|
}
|
||||||
self.fec_set_shred_start = self.shreds.len();
|
self.fec_set_shred_start = self.shreds.len();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -879,6 +882,17 @@ mod tests {
|
|||||||
verify_test_code_shred(&shred, 2, slot, &keypair.pubkey(), true);
|
verify_test_code_shred(&shred, 2, slot, &keypair.pubkey(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_large_data_shredder() {
|
||||||
|
let keypair = Arc::new(Keypair::new());
|
||||||
|
let mut shredder =
|
||||||
|
Shredder::new(1, 0, 0.0, &keypair, 0).expect("Failed in creating shredder");
|
||||||
|
|
||||||
|
let data = vec![0u8; 1000 * 1000];
|
||||||
|
bincode::serialize_into(&mut shredder, &data).unwrap();
|
||||||
|
assert!(shredder.shreds.len() > data.len() / PACKET_DATA_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_recovery_and_reassembly() {
|
fn test_recovery_and_reassembly() {
|
||||||
let keypair = Arc::new(Keypair::new());
|
let keypair = Arc::new(Keypair::new());
|
||||||
|
Reference in New Issue
Block a user