Skip to content

Commit

Permalink
refactor: correct constructors for SubtreeStateSyncInfo and `MultiS…
Browse files Browse the repository at this point in the history
…tateSyncInfo` (#298)

* correct constructors

* default impl

* default impl

* refactoring

* fix
  • Loading branch information
ogabrielides authored May 16, 2024
1 parent 65a7512 commit 016795e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 22 deletions.
41 changes: 20 additions & 21 deletions grovedb/src/replication.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Restorer<PrefixedRocksDbImmediateStorageContext<'db>>>,
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -140,25 +158,6 @@ pub fn util_decode_vec_ops(chunk: Vec<u8>) -> Result<Vec<Op>, 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.
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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));
Expand Down
2 changes: 1 addition & 1 deletion tutorials/src/bin/replication.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down

0 comments on commit 016795e

Please sign in to comment.