diff options
author | Vladimir Feinberg <vladimir.feinberg@gmail.com> | 2021-06-29 07:51:36 -0700 |
---|---|---|
committer | Vladimir Feinberg <vladimir.feinberg@gmail.com> | 2021-06-29 07:51:36 -0700 |
commit | 5c9d4b4f8b74eccaea370d8f6a79960c78ff75b4 (patch) | |
tree | 87c9f113c891bf05a277136e17b20219c48429a7 | |
parent | e914d99f0ddc73c0a834c9a93869f372e9d543d3 (diff) |
use slightly more chunks
-rw-r--r-- | slb/Cargo.toml | 2 | ||||
-rw-r--r-- | slb/src/fileblocks.rs | 5 |
2 files changed, 4 insertions, 3 deletions
diff --git a/slb/Cargo.toml b/slb/Cargo.toml index 5232d33..f6ded9a 100644 --- a/slb/Cargo.toml +++ b/slb/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "slb" -version = "0.2.2" +version = "0.2.3" authors = ["Vladimir Feinberg <vladimir.feinberg@gmail.com>"] edition = "2018" description = "Sharded load balancing text-streaming Unix tool" diff --git a/slb/src/fileblocks.rs b/slb/src/fileblocks.rs index 2cee2fa..136f201 100644 --- a/slb/src/fileblocks.rs +++ b/slb/src/fileblocks.rs @@ -53,6 +53,7 @@ impl FileChunk { /// Uses up to `max_chunks + paths.len()` chunks to chunkify multiple files. pub fn chunkify_multiple(paths: &[PathBuf], max_chunks: usize, min_size: usize) -> Vec<FileChunk> { assert!(max_chunks > 0); + assert!(!paths.is_empty()); let sizes: Vec<usize> = paths .iter() .map(|path| { @@ -63,12 +64,12 @@ pub fn chunkify_multiple(paths: &[PathBuf], max_chunks: usize, min_size: usize) .unwrap() }) .collect(); - let avg_size = (sizes.iter().copied().sum::<usize>() / paths.len()).max(1); + let avg_size = (sizes.iter().copied().sum::<usize>() + paths.len() - 1) / paths.len(); paths .iter() .zip(sizes.into_iter()) .flat_map(|(path, sz)| { - let desired_chunks: usize = (sz / avg_size).max(1); + let desired_chunks: usize = (sz + avg_size - 1) / avg_size; chunkify(&path, desired_chunks, min_size).into_iter() }) .collect() |