diff --git a/src/erasure.rs b/src/erasure.rs index 5765770a88..b627728d8d 100644 --- a/src/erasure.rs +++ b/src/erasure.rs @@ -1,5 +1,5 @@ // Support erasure coding -use packet::{BlobRecycler, SharedBlob, BLOB_HEADER_SIZE, BLOB_SIZE}; +use packet::{BlobRecycler, SharedBlob, BLOB_DATA_SIZE, BLOB_HEADER_SIZE}; use std::cmp; use std::mem; use std::result; diff --git a/src/ledger.rs b/src/ledger.rs index 34a784e9a4..870aee5d7a 100644 --- a/src/ledger.rs +++ b/src/ledger.rs @@ -57,7 +57,7 @@ pub fn reconstruct_entries_from_blobs(blobs: VecDeque) -> bincode::R for blob in blobs { let entry = { let msg = blob.read().unwrap(); - let msg_size = msg.get_size().unwrap(); + let msg_size = msg.get_size(); deserialize(&msg.data()[..msg_size]) }; @@ -200,7 +200,6 @@ mod tests { let mut transactions = vec![tx0; 362]; transactions.extend(vec![tx1; 100]); let entries = next_entries(&zero, 0, transactions); - eprintln!("entries.len() {}", entries.len()); let blob_recycler = BlobRecycler::default(); let mut blob_q = VecDeque::new(); entries.to_blobs(&blob_recycler, &mut blob_q); diff --git a/src/packet.rs b/src/packet.rs index 2c96624536..4015184e44 100644 --- a/src/packet.rs +++ b/src/packet.rs @@ -139,6 +139,12 @@ impl Default for Blob { } } +//#[derive(Debug)] +//pub enum BlobError { +// /// the Blob's meta and data are not self-consistent +// BadState, +//} + pub struct Recycler { gc: Arc>>>>, } @@ -373,18 +379,32 @@ impl Blob { pub fn data_mut(&mut self) -> &mut [u8] { &mut self.data[BLOB_HEADER_SIZE..] } - pub fn get_size(&self) -> Result { - let size = self.get_data_size()? as usize; - assert_eq!(self.meta.size, size); - // TODO: return an error instead of panicking - Ok(size) + pub fn get_size(&self) -> usize { + let size = self.get_data_size().unwrap() as usize; + + if self.meta.size == size { + size - BLOB_HEADER_SIZE + } else { + 0 + } + + // TODO: return a Result instead of + // returning zero + // + //let size = self.get_data_size()? as usize; + //if self.meta.size == size { + // Ok(size - BLOB_HEADER_SIZE) + //} else { + // // these don't work... + // Err("bad state") + // // Err(BlobError::BadState) + //} } pub fn set_size(&mut self, size: usize) { let new_size = size + BLOB_HEADER_SIZE; self.meta.size = new_size; self.set_data_size(new_size as u64).unwrap(); } - pub fn recv_from(re: &BlobRecycler, socket: &UdpSocket) -> Result { let mut v = VecDeque::new(); //DOCUMENTED SIDE-EFFECT