diff --git a/core/src/blocktree.rs b/core/src/blocktree.rs index 0d037d1439..3146406c0b 100644 --- a/core/src/blocktree.rs +++ b/core/src/blocktree.rs @@ -612,6 +612,11 @@ impl Blocktree { Ok(result) } + pub fn deserialize_blob_data(data: &[u8]) -> Result> { + let entries = deserialize(data)?; + Ok(entries) + } + fn deserialize_blobs(blob_datas: &[I]) -> Vec where I: Borrow<[u8]>, @@ -620,9 +625,8 @@ impl Blocktree { .iter() .flat_map(|blob_data| { let serialized_entries_data = &blob_data.borrow()[BLOB_HEADER_SIZE..]; - let entries: Vec = deserialize(serialized_entries_data) - .expect("Ledger should only contain well formed data"); - entries + Self::deserialize_blob_data(serialized_entries_data) + .expect("Ledger should only contain well formed data") }) .collect() } diff --git a/core/tests/replicator.rs b/core/tests/replicator.rs index 72f3d37795..1a618f4e9c 100644 --- a/core/tests/replicator.rs +++ b/core/tests/replicator.rs @@ -8,7 +8,6 @@ use bincode::{deserialize, serialize}; use solana::blocktree::{create_new_tmp_ledger, tmp_copy_blocktree, Blocktree}; use solana::cluster_info::{ClusterInfo, Node}; use solana::contact_info::ContactInfo; -use solana::entry::Entry; use solana::fullnode::{Fullnode, FullnodeConfig}; use solana::gossip_service::discover; use solana::local_cluster::LocalCluster; @@ -82,10 +81,13 @@ fn download_from_replicator(replicator_info: &ContactInfo) { for b in blobs { let br = b.read().unwrap(); assert!(br.index() == repair_index); - let entry: Entry = deserialize(&br.data()[..br.meta.size]).unwrap(); - info!("entry: {:?}", entry); - assert_ne!(entry.hash, Hash::default()); - received_blob = true; + info!("br: {:?}", br); + let entries = Blocktree::deserialize_blob_data(&br.data()).unwrap(); + for entry in &entries { + info!("entry: {:?}", entry); + assert_ne!(entry.hash, Hash::default()); + received_blob = true; + } } break; }