summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Feinberg <vladimir.feinberg@gmail.com>2021-06-29 07:51:36 -0700
committerVladimir Feinberg <vladimir.feinberg@gmail.com>2021-06-29 07:51:36 -0700
commit5c9d4b4f8b74eccaea370d8f6a79960c78ff75b4 (patch)
tree87c9f113c891bf05a277136e17b20219c48429a7
parente914d99f0ddc73c0a834c9a93869f372e9d543d3 (diff)
use slightly more chunks
-rw-r--r--slb/Cargo.toml2
-rw-r--r--slb/src/fileblocks.rs5
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()