Cleanup redundant AsFixedBytes and FixedLength traits (#3131)
* no need for AsFixedBytes we can just use AsRef<[u8]> * cleanup FixedLength trait * revert this change for now * fix store tests * cleanup and fix tests after rebase * fix tests * update based on PR review less hard-coded values now * cleanup
This commit is contained in:
+6
-5
@@ -19,11 +19,12 @@ use std::{io, time};
|
||||
use crate::core::core::hash::{Hash, Hashed};
|
||||
use crate::core::core::pmmr::{self, family, Backend};
|
||||
use crate::core::core::BlockHeader;
|
||||
use crate::core::ser::{FixedLength, PMMRable, ProtocolVersion};
|
||||
use crate::core::ser::{PMMRable, ProtocolVersion};
|
||||
use crate::leaf_set::LeafSet;
|
||||
use crate::prune_list::PruneList;
|
||||
use crate::types::{AppendOnlyFile, DataFile, SizeEntry, SizeInfo};
|
||||
use croaring::Bitmap;
|
||||
use std::convert::TryInto;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
const PMMR_HASH_FILE: &str = "pmmr_hash.bin";
|
||||
@@ -229,11 +230,11 @@ impl<T: PMMRable> Backend<T> for PMMRBackend<T> {
|
||||
|
||||
impl<T: PMMRable> PMMRBackend<T> {
|
||||
/// Instantiates a new PMMR backend.
|
||||
/// If optional size is provided then treat as "fixed" size otherwise "variable" size backend.
|
||||
/// Use the provided dir to store its files.
|
||||
pub fn new<P: AsRef<Path>>(
|
||||
data_dir: P,
|
||||
prunable: bool,
|
||||
fixed_size: bool,
|
||||
version: ProtocolVersion,
|
||||
header: Option<&BlockHeader>,
|
||||
) -> io::Result<PMMRBackend<T>> {
|
||||
@@ -241,8 +242,8 @@ impl<T: PMMRable> PMMRBackend<T> {
|
||||
|
||||
// Are we dealing with "fixed size" data elements or "variable size" data elements
|
||||
// maintained in an associated size file?
|
||||
let size_info = if fixed_size {
|
||||
SizeInfo::FixedSize(T::E::LEN as u16)
|
||||
let size_info = if let Some(fixed_size) = T::elmt_size() {
|
||||
SizeInfo::FixedSize(fixed_size)
|
||||
} else {
|
||||
SizeInfo::VariableSize(Box::new(AppendOnlyFile::open(
|
||||
data_dir.join(PMMR_SIZE_FILE),
|
||||
@@ -252,7 +253,7 @@ impl<T: PMMRable> PMMRBackend<T> {
|
||||
};
|
||||
|
||||
// Hash file is always "fixed size" and we use 32 bytes per hash.
|
||||
let hash_size_info = SizeInfo::FixedSize(Hash::LEN as u16);
|
||||
let hash_size_info = SizeInfo::FixedSize(Hash::LEN.try_into().unwrap());
|
||||
|
||||
let hash_file = DataFile::open(&data_dir.join(PMMR_HASH_FILE), hash_size_info, version)?;
|
||||
let data_file = DataFile::open(&data_dir.join(PMMR_DATA_FILE), size_info, version)?;
|
||||
|
||||
+4
-4
@@ -16,8 +16,7 @@ use memmap;
|
||||
use tempfile::tempfile;
|
||||
|
||||
use crate::core::ser::{
|
||||
self, BinWriter, FixedLength, ProtocolVersion, Readable, Reader, StreamingReader, Writeable,
|
||||
Writer,
|
||||
self, BinWriter, ProtocolVersion, Readable, Reader, StreamingReader, Writeable, Writer,
|
||||
};
|
||||
use std::fmt::Debug;
|
||||
use std::fs::{self, File, OpenOptions};
|
||||
@@ -39,8 +38,9 @@ pub struct SizeEntry {
|
||||
pub size: u16,
|
||||
}
|
||||
|
||||
impl FixedLength for SizeEntry {
|
||||
const LEN: usize = 8 + 2;
|
||||
impl SizeEntry {
|
||||
/// Length of a size entry (8 + 2 bytes) for convenience.
|
||||
pub const LEN: u16 = 8 + 2;
|
||||
}
|
||||
|
||||
impl Readable for SizeEntry {
|
||||
|
||||
+32
-76
@@ -24,22 +24,16 @@ use croaring::Bitmap;
|
||||
use crate::core::core::hash::DefaultHashable;
|
||||
use crate::core::core::pmmr::{Backend, PMMR};
|
||||
use crate::core::ser::{
|
||||
Error, FixedLength, PMMRIndexHashable, PMMRable, ProtocolVersion, Readable, Reader, Writeable,
|
||||
Writer,
|
||||
Error, PMMRIndexHashable, PMMRable, ProtocolVersion, Readable, Reader, Writeable, Writer,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn pmmr_leaf_idx_iter() {
|
||||
let (data_dir, elems) = setup("leaf_idx_iter");
|
||||
{
|
||||
let mut backend = store::pmmr::PMMRBackend::new(
|
||||
data_dir.to_string(),
|
||||
true,
|
||||
false,
|
||||
ProtocolVersion(1),
|
||||
None,
|
||||
)
|
||||
.unwrap();
|
||||
let mut backend =
|
||||
store::pmmr::PMMRBackend::new(data_dir.to_string(), true, ProtocolVersion(1), None)
|
||||
.unwrap();
|
||||
|
||||
// adding first set of 4 elements and sync
|
||||
let mmr_size = load(0, &elems[0..5], &mut backend);
|
||||
@@ -62,14 +56,9 @@ fn pmmr_leaf_idx_iter() {
|
||||
fn pmmr_append() {
|
||||
let (data_dir, elems) = setup("append");
|
||||
{
|
||||
let mut backend = store::pmmr::PMMRBackend::new(
|
||||
data_dir.to_string(),
|
||||
false,
|
||||
false,
|
||||
ProtocolVersion(1),
|
||||
None,
|
||||
)
|
||||
.unwrap();
|
||||
let mut backend =
|
||||
store::pmmr::PMMRBackend::new(data_dir.to_string(), false, ProtocolVersion(1), None)
|
||||
.unwrap();
|
||||
|
||||
// adding first set of 4 elements and sync
|
||||
let mut mmr_size = load(0, &elems[0..4], &mut backend);
|
||||
@@ -154,14 +143,9 @@ fn pmmr_compact_leaf_sibling() {
|
||||
|
||||
// setup the mmr store with all elements
|
||||
{
|
||||
let mut backend = store::pmmr::PMMRBackend::new(
|
||||
data_dir.to_string(),
|
||||
true,
|
||||
false,
|
||||
ProtocolVersion(1),
|
||||
None,
|
||||
)
|
||||
.unwrap();
|
||||
let mut backend =
|
||||
store::pmmr::PMMRBackend::new(data_dir.to_string(), true, ProtocolVersion(1), None)
|
||||
.unwrap();
|
||||
let mmr_size = load(0, &elems[..], &mut backend);
|
||||
backend.sync().unwrap();
|
||||
|
||||
@@ -236,14 +220,9 @@ fn pmmr_prune_compact() {
|
||||
|
||||
// setup the mmr store with all elements
|
||||
{
|
||||
let mut backend = store::pmmr::PMMRBackend::new(
|
||||
data_dir.to_string(),
|
||||
true,
|
||||
false,
|
||||
ProtocolVersion(1),
|
||||
None,
|
||||
)
|
||||
.unwrap();
|
||||
let mut backend =
|
||||
store::pmmr::PMMRBackend::new(data_dir.to_string(), true, ProtocolVersion(1), None)
|
||||
.unwrap();
|
||||
let mmr_size = load(0, &elems[..], &mut backend);
|
||||
backend.sync().unwrap();
|
||||
|
||||
@@ -293,14 +272,9 @@ fn pmmr_reload() {
|
||||
|
||||
// set everything up with an initial backend
|
||||
{
|
||||
let mut backend = store::pmmr::PMMRBackend::new(
|
||||
data_dir.to_string(),
|
||||
true,
|
||||
false,
|
||||
ProtocolVersion(1),
|
||||
None,
|
||||
)
|
||||
.unwrap();
|
||||
let mut backend =
|
||||
store::pmmr::PMMRBackend::new(data_dir.to_string(), true, ProtocolVersion(1), None)
|
||||
.unwrap();
|
||||
|
||||
let mmr_size = load(0, &elems[..], &mut backend);
|
||||
|
||||
@@ -359,14 +333,9 @@ fn pmmr_reload() {
|
||||
// create a new backend referencing the data files
|
||||
// and check everything still works as expected
|
||||
{
|
||||
let mut backend = store::pmmr::PMMRBackend::new(
|
||||
data_dir.to_string(),
|
||||
true,
|
||||
false,
|
||||
ProtocolVersion(1),
|
||||
None,
|
||||
)
|
||||
.unwrap();
|
||||
let mut backend =
|
||||
store::pmmr::PMMRBackend::new(data_dir.to_string(), true, ProtocolVersion(1), None)
|
||||
.unwrap();
|
||||
assert_eq!(backend.unpruned_size(), mmr_size);
|
||||
{
|
||||
let pmmr: PMMR<'_, TestElem, _> = PMMR::at(&mut backend, mmr_size);
|
||||
@@ -407,7 +376,7 @@ fn pmmr_rewind() {
|
||||
let (data_dir, elems) = setup("rewind");
|
||||
{
|
||||
let mut backend =
|
||||
store::pmmr::PMMRBackend::new(data_dir.clone(), true, false, ProtocolVersion(1), None)
|
||||
store::pmmr::PMMRBackend::new(data_dir.clone(), true, ProtocolVersion(1), None)
|
||||
.unwrap();
|
||||
|
||||
// adding elements and keeping the corresponding root
|
||||
@@ -524,7 +493,7 @@ fn pmmr_compact_single_leaves() {
|
||||
let (data_dir, elems) = setup("compact_single_leaves");
|
||||
{
|
||||
let mut backend =
|
||||
store::pmmr::PMMRBackend::new(data_dir.clone(), true, false, ProtocolVersion(1), None)
|
||||
store::pmmr::PMMRBackend::new(data_dir.clone(), true, ProtocolVersion(1), None)
|
||||
.unwrap();
|
||||
let mmr_size = load(0, &elems[0..5], &mut backend);
|
||||
backend.sync().unwrap();
|
||||
@@ -560,7 +529,7 @@ fn pmmr_compact_entire_peak() {
|
||||
let (data_dir, elems) = setup("compact_entire_peak");
|
||||
{
|
||||
let mut backend =
|
||||
store::pmmr::PMMRBackend::new(data_dir.clone(), true, false, ProtocolVersion(1), None)
|
||||
store::pmmr::PMMRBackend::new(data_dir.clone(), true, ProtocolVersion(1), None)
|
||||
.unwrap();
|
||||
let mmr_size = load(0, &elems[0..5], &mut backend);
|
||||
backend.sync().unwrap();
|
||||
@@ -616,14 +585,9 @@ fn pmmr_compact_horizon() {
|
||||
|
||||
let mmr_size;
|
||||
{
|
||||
let mut backend = store::pmmr::PMMRBackend::new(
|
||||
data_dir.clone(),
|
||||
true,
|
||||
false,
|
||||
ProtocolVersion(1),
|
||||
None,
|
||||
)
|
||||
.unwrap();
|
||||
let mut backend =
|
||||
store::pmmr::PMMRBackend::new(data_dir.clone(), true, ProtocolVersion(1), None)
|
||||
.unwrap();
|
||||
mmr_size = load(0, &elems[..], &mut backend);
|
||||
backend.sync().unwrap();
|
||||
|
||||
@@ -705,7 +669,6 @@ fn pmmr_compact_horizon() {
|
||||
let backend = store::pmmr::PMMRBackend::<TestElem>::new(
|
||||
data_dir.to_string(),
|
||||
true,
|
||||
false,
|
||||
ProtocolVersion(1),
|
||||
None,
|
||||
)
|
||||
@@ -726,7 +689,6 @@ fn pmmr_compact_horizon() {
|
||||
let mut backend = store::pmmr::PMMRBackend::<TestElem>::new(
|
||||
data_dir.to_string(),
|
||||
true,
|
||||
false,
|
||||
ProtocolVersion(1),
|
||||
None,
|
||||
)
|
||||
@@ -749,7 +711,6 @@ fn pmmr_compact_horizon() {
|
||||
let backend = store::pmmr::PMMRBackend::<TestElem>::new(
|
||||
data_dir.to_string(),
|
||||
true,
|
||||
false,
|
||||
ProtocolVersion(1),
|
||||
None,
|
||||
)
|
||||
@@ -782,14 +743,9 @@ fn compact_twice() {
|
||||
// setup the mmr store with all elements
|
||||
// Scoped to allow Windows to teardown
|
||||
{
|
||||
let mut backend = store::pmmr::PMMRBackend::new(
|
||||
data_dir.to_string(),
|
||||
true,
|
||||
false,
|
||||
ProtocolVersion(1),
|
||||
None,
|
||||
)
|
||||
.unwrap();
|
||||
let mut backend =
|
||||
store::pmmr::PMMRBackend::new(data_dir.to_string(), true, ProtocolVersion(1), None)
|
||||
.unwrap();
|
||||
let mmr_size = load(0, &elems[..], &mut backend);
|
||||
backend.sync().unwrap();
|
||||
|
||||
@@ -1008,16 +964,16 @@ struct TestElem(u32);
|
||||
|
||||
impl DefaultHashable for TestElem {}
|
||||
|
||||
impl FixedLength for TestElem {
|
||||
const LEN: usize = 4;
|
||||
}
|
||||
|
||||
impl PMMRable for TestElem {
|
||||
type E = Self;
|
||||
|
||||
fn as_elmt(&self) -> Self::E {
|
||||
self.clone()
|
||||
}
|
||||
|
||||
fn elmt_size() -> Option<u16> {
|
||||
Some(4)
|
||||
}
|
||||
}
|
||||
|
||||
impl Writeable for TestElem {
|
||||
|
||||
Reference in New Issue
Block a user