Skip to content

Commit

Permalink
This changes how we generate the trees by using the recursive strateg…
Browse files Browse the repository at this point in the history
…y once and then mapping file-nodes to empty directories.

This should be more performant than our latest, and have similar performance and distribution as the old implementation. Our new implementation  lead to the inner strategy (which defines # of nodes, etc ... for the whole tree) to be run multiple times.

Signed-off-by: Christian Hagemeier <[email protected]>
  • Loading branch information
c-hagem committed Jan 14, 2025
1 parent ab77aaa commit 1a95ef7
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions mountpoint-s3/tests/reftests/generators.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,7 @@ impl Debug for TreeNode {
/// Parents are always [TreeNode::Directory].
pub fn gen_tree(depth: u32, max_size: u32, max_items: u32, max_width: usize) -> impl Strategy<Value = TreeNode> {
let leaf = any::<FileContent>().prop_map(TreeNode::File);

let strategy = leaf.prop_recursive(
leaf.prop_recursive(
depth, // levels
max_size, // max number of nodes
max_items, // number of items per collection
Expand All @@ -138,10 +137,12 @@ pub fn gen_tree(depth: u32, max_size: u32, max_items: u32, max_width: usize) ->
// Since the size of the tree could be zero, this also introduces directories as leaves.
prop::collection::btree_map(any::<Name>(), inner, 0..max_width).prop_map(TreeNode::Directory)
},
);

// Ensure the root is always a directory by wrapping the inner strategy
prop::collection::btree_map(any::<Name>(), strategy, 0..max_width).prop_map(TreeNode::Directory)
)
// Ensure the root is always a directory by transforming invalid nodes (i.e. file as root) into empty directories
.prop_map(|x| match x {
TreeNode::File(_) => TreeNode::Directory(BTreeMap::from([])),
_ => x,
})
}

/// Take a generated tree and create the corresponding S3 namespace (list of keys)
Expand Down

0 comments on commit 1a95ef7

Please sign in to comment.