Skip to content

Commit

Permalink
Merge pull request #112 from ec2/ec2/for_each_checkpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
nuttycom authored Sep 12, 2024
2 parents 0f76ad8 + 8ccb40d commit 8aa12e4
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 0 deletions.
3 changes: 3 additions & 0 deletions shardtree/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ and this project adheres to Rust's notion of

## Unreleased

### Added
- `shardtree::store::ShardStore::for_each_checkpoint`

## [0.4.0] - 2024-08-12

This is a bugfix release that fixes a couple of subtle problems related to
Expand Down
13 changes: 13 additions & 0 deletions shardtree/src/store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,12 @@ pub trait ShardStore {
where
F: FnMut(&Self::CheckpointId, &Checkpoint) -> Result<(), Self::Error>;

/// Calls the given callback for each checkpoint in `CheckpointId` order. This is
/// essentially the immutable version of `with_checkpoints`.
fn for_each_checkpoint<F>(&self, limit: usize, callback: F) -> Result<(), Self::Error>
where
F: FnMut(&Self::CheckpointId, &Checkpoint) -> Result<(), Self::Error>;

/// Update the checkpoint having the given identifier by mutating it with the provided
/// function, and persist the updated checkpoint to the data store.
///
Expand Down Expand Up @@ -218,6 +224,13 @@ impl<S: ShardStore> ShardStore for &mut S {
S::with_checkpoints(self, limit, callback)
}

fn for_each_checkpoint<F>(&self, limit: usize, callback: F) -> Result<(), Self::Error>
where
F: FnMut(&Self::CheckpointId, &Checkpoint) -> Result<(), Self::Error>,
{
S::for_each_checkpoint(self, limit, callback)
}

fn update_checkpoint_with<F>(
&mut self,
checkpoint_id: &Self::CheckpointId,
Expand Down
6 changes: 6 additions & 0 deletions shardtree/src/store/caching.rs
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,12 @@ where
{
self.cache.with_checkpoints(limit, callback)
}
fn for_each_checkpoint<F>(&self, limit: usize, callback: F) -> Result<(), Self::Error>
where
F: FnMut(&Self::CheckpointId, &Checkpoint) -> Result<(), Self::Error>,
{
self.cache.for_each_checkpoint(limit, callback)
}

fn update_checkpoint_with<F>(
&mut self,
Expand Down
11 changes: 11 additions & 0 deletions shardtree/src/store/memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,17 @@ impl<H: Clone, C: Clone + Ord> ShardStore for MemoryShardStore<H, C> {
Ok(())
}

fn for_each_checkpoint<F>(&self, limit: usize, mut callback: F) -> Result<(), Self::Error>
where
F: FnMut(&C, &Checkpoint) -> Result<(), Self::Error>,
{
for (cid, checkpoint) in self.checkpoints.iter().take(limit) {
callback(cid, checkpoint)?
}

Ok(())
}

fn update_checkpoint_with<F>(
&mut self,
checkpoint_id: &C,
Expand Down

0 comments on commit 8aa12e4

Please sign in to comment.