diff --git a/grovedb/src/replication.rs b/grovedb/src/replication.rs index c42d6b7c..11b0cb6c 100644 --- a/grovedb/src/replication.rs +++ b/grovedb/src/replication.rs @@ -21,6 +21,7 @@ pub(crate) type SubtreePrefix = [u8; blake3::OUT_LEN]; pub const CURRENT_STATE_SYNC_VERSION: u16 = 1; +#[derive(Default)] struct SubtreeStateSyncInfo<'db> { // Current Chunk restorer restorer: Option>>, @@ -31,6 +32,13 @@ struct SubtreeStateSyncInfo<'db> { num_processed_chunks: usize, } +impl<'a> SubtreeStateSyncInfo<'a> { + // Function to create an instance of SubtreeStateSyncInfo with default values + pub fn new() -> Self { + Self::default() + } +} + // Struct governing state sync pub struct MultiStateSyncInfo<'db> { // Map of current processing subtrees @@ -42,6 +50,16 @@ pub struct MultiStateSyncInfo<'db> { version: u16, } +impl<'db> Default for MultiStateSyncInfo<'db> { + fn default() -> Self { + Self { + current_prefixes: BTreeMap::new(), + processed_prefixes: BTreeSet::new(), + version: CURRENT_STATE_SYNC_VERSION, + } + } +} + // Struct containing information about current subtrees found in GroveDB pub struct SubtreesMetadata { // Map of Prefix (Path digest) -> (Actual path, Parent Subtree actual_value_hash, Parent @@ -140,25 +158,6 @@ pub fn util_decode_vec_ops(chunk: Vec) -> Result, Error> { #[cfg(feature = "full")] impl GroveDb { - fn create_subtree_state_sync_info(&self) -> SubtreeStateSyncInfo { - let pending_chunks = BTreeSet::new(); - SubtreeStateSyncInfo { - restorer: None, - pending_chunks, - num_processed_chunks: 0, - } - } - - pub fn create_multi_state_sync_info(&self) -> MultiStateSyncInfo { - let processed_prefixes = BTreeSet::new(); - let current_prefixes = BTreeMap::default(); - MultiStateSyncInfo { - current_prefixes, - processed_prefixes, - version: CURRENT_STATE_SYNC_VERSION, - } - } - // Returns the discovered subtrees found recursively along with their associated // metadata Params: // tx: Transaction. Function returns the data by opening merks at given tx. @@ -383,7 +382,7 @@ impl GroveDb { replication::util_path_to_string(&[]) ); - let mut root_prefix_state_sync_info = self.create_subtree_state_sync_info(); + let mut root_prefix_state_sync_info = SubtreeStateSyncInfo::default(); let root_prefix = [0u8; 32]; if let Ok(merk) = self.open_merk_for_replication(SubtreePath::empty(), tx) { let restorer = Restorer::new(merk, app_hash, None); @@ -588,7 +587,7 @@ impl GroveDb { replication::util_path_to_string(&prefix_metadata.0) ); - let mut subtree_state_sync_info = self.create_subtree_state_sync_info(); + let mut subtree_state_sync_info = SubtreeStateSyncInfo::default(); if let Ok(merk) = self.open_merk_for_replication(path.into(), tx) { let restorer = Restorer::new(merk, *s_elem_value_hash, Some(*s_actual_value_hash)); diff --git a/tutorials/src/bin/replication.rs b/tutorials/src/bin/replication.rs index 9f2ba25e..f3e09532 100644 --- a/tutorials/src/bin/replication.rs +++ b/tutorials/src/bin/replication.rs @@ -101,7 +101,7 @@ fn main() { println!("{:?}", subtrees_metadata_source); println!("\n######### db_checkpoint_0 -> db_destination state sync"); - let state_info = db_destination.create_multi_state_sync_info(); + let state_info = MultiStateSyncInfo::default(); let tx = db_destination.start_transaction(); sync_db_demo(&db_checkpoint_0, &db_destination, state_info, &tx).unwrap(); db_destination.commit_transaction(tx).unwrap().expect("expected to commit transaction");