Use BlobError for get_size return

This commit is contained in:
Stephen Akridge 2018-07-25 12:15:26 -07:00 committed by Rob Walker
parent 75212f40e7
commit 212874e155
3 changed files with 17 additions and 27 deletions

View File

@ -1,11 +1,12 @@
//! The `ledger` module provides functions for parallel verification of the //! The `ledger` module provides functions for parallel verification of the
//! Proof of History ledger. //! Proof of History ledger.
use bincode::{self, deserialize, serialize_into}; use bincode::{deserialize, serialize_into};
use entry::Entry; use entry::Entry;
use hash::Hash; use hash::Hash;
use packet::{self, SharedBlob, BLOB_DATA_SIZE}; use packet::{self, SharedBlob, BLOB_DATA_SIZE};
use rayon::prelude::*; use rayon::prelude::*;
use result::{Error, Result};
use std::collections::VecDeque; use std::collections::VecDeque;
use std::io::Cursor; use std::io::Cursor;
use transaction::Transaction; use transaction::Transaction;
@ -51,21 +52,21 @@ impl Block for [Entry] {
} }
} }
pub fn reconstruct_entries_from_blobs(blobs: VecDeque<SharedBlob>) -> bincode::Result<Vec<Entry>> { pub fn reconstruct_entries_from_blobs(blobs: VecDeque<SharedBlob>) -> Result<Vec<Entry>> {
let mut entries: Vec<Entry> = Vec::with_capacity(blobs.len()); let mut entries: Vec<Entry> = Vec::with_capacity(blobs.len());
for blob in blobs { for blob in blobs {
let entry = { let entry = {
let msg = blob.read().unwrap(); let msg = blob.read().unwrap();
let msg_size = msg.get_size(); let msg_size = msg.get_size()?;
deserialize(&msg.data()[..msg_size]) deserialize(&msg.data()[..msg_size])
}; };
match entry { match entry {
Ok(entry) => entries.push(entry), Ok(entry) => entries.push(entry),
Err(err) => { Err(err) => {
trace!("reconstruct_entry_from_blobs: {}", err); trace!("reconstruct_entry_from_blobs: {:?}", err);
return Err(err); return Err(Error::Serialize(err));
} }
} }
} }

View File

@ -139,11 +139,11 @@ impl Default for Blob {
} }
} }
//#[derive(Debug)] #[derive(Debug)]
//pub enum BlobError { pub enum BlobError {
// /// the Blob's meta and data are not self-consistent /// the Blob's meta and data are not self-consistent
// BadState, BadState,
//} }
pub struct Recycler<T> { pub struct Recycler<T> {
gc: Arc<Mutex<Vec<Arc<RwLock<T>>>>>, gc: Arc<Mutex<Vec<Arc<RwLock<T>>>>>,
@ -379,26 +379,13 @@ impl Blob {
pub fn data_mut(&mut self) -> &mut [u8] { pub fn data_mut(&mut self) -> &mut [u8] {
&mut self.data[BLOB_HEADER_SIZE..] &mut self.data[BLOB_HEADER_SIZE..]
} }
pub fn get_size(&self) -> usize { pub fn get_size(&self) -> Result<usize> {
let size = self.get_data_size().unwrap() as usize; let size = self.get_data_size()? as usize;
if self.meta.size == size { if self.meta.size == size {
size - BLOB_HEADER_SIZE Ok(size - BLOB_HEADER_SIZE)
} else { } else {
0 Err(Error::BlobError(BlobError::BadState))
} }
// TODO: return a Result<usize> 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) { pub fn set_size(&mut self, size: usize) {
let new_size = size + BLOB_HEADER_SIZE; let new_size = size + BLOB_HEADER_SIZE;

View File

@ -5,6 +5,7 @@ use bincode;
use crdt; use crdt;
#[cfg(feature = "erasure")] #[cfg(feature = "erasure")]
use erasure; use erasure;
use packet;
use serde_json; use serde_json;
use std; use std;
use std::any::Any; use std::any::Any;
@ -22,6 +23,7 @@ pub enum Error {
BankError(bank::BankError), BankError(bank::BankError),
CrdtError(crdt::CrdtError), CrdtError(crdt::CrdtError),
WindowError(streamer::WindowError), WindowError(streamer::WindowError),
BlobError(packet::BlobError),
#[cfg(feature = "erasure")] #[cfg(feature = "erasure")]
ErasureError(erasure::ErasureError), ErasureError(erasure::ErasureError),
SendError, SendError,