Use BlobError for get_size return
This commit is contained in:
parent
75212f40e7
commit
212874e155
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue