From 9aedb6854d6b0ce762c8c8190f829fa16f51fa51 Mon Sep 17 00:00:00 2001 From: Rob Fitzgerald Date: Thu, 30 Apr 2026 21:06:32 -0600 Subject: [PATCH 1/3] safe chunk size argument for bundle ops when len archives < parallelism --- rust/bambam-gtfs/src/schedule/bundle_ops.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/rust/bambam-gtfs/src/schedule/bundle_ops.rs b/rust/bambam-gtfs/src/schedule/bundle_ops.rs index e44c880f..27139fb3 100644 --- a/rust/bambam-gtfs/src/schedule/bundle_ops.rs +++ b/rust/bambam-gtfs/src/schedule/bundle_ops.rs @@ -78,7 +78,8 @@ pub fn batch_process( .map_err(|e| ScheduleError::GtfsApp(format!("failure reading directory: {e}")))? .collect::, _>>() .map_err(|e| ScheduleError::GtfsApp(format!("failure reading directory: {e}")))?; - let chunk_size = archive_paths.len() / std::cmp::max(1, parallelism); + + let chunk_size = calculate_chunk_size(archive_paths.len(), parallelism); // a progress bar shared across threads let bar: Arc> = Arc::new(Mutex::new( @@ -700,3 +701,13 @@ fn archive_intersects_extent(gtfs: &Gtfs, extent: &Geometry) -> Result usize { + let par_denom = std::cmp::max(1, parallelism); + if archives < par_denom { + 1 + } else { + archives / par_denom + } +} From fff0953b7c8540f5194483fe2460fb9e64a8194d Mon Sep 17 00:00:00 2001 From: Rob Fitzgerald Date: Thu, 30 Apr 2026 21:06:47 -0600 Subject: [PATCH 2/3] clarifying comment --- rust/bambam/src/app/gtfs_config/run.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/bambam/src/app/gtfs_config/run.rs b/rust/bambam/src/app/gtfs_config/run.rs index 5b1af54c..eab1f5b4 100644 --- a/rust/bambam/src/app/gtfs_config/run.rs +++ b/rust/bambam/src/app/gtfs_config/run.rs @@ -334,7 +334,7 @@ where Ok(result) } -/// finds what modes are already available via other edge lists in the config. +/// finds what modes are already available via other edge lists via the Label model in the config. /// assumes that each edge list has a "multimodal" TraversalModel type. /// enforces that the mode list matches the listing in the label model. pub fn get_available_modes(base_conf: &CompassAppConfig) -> Result, GtfsConfigError> { From 0f52aaf491b342c50ad06529d58b8a9dea08ce4f Mon Sep 17 00:00:00 2001 From: Rob Fitzgerald Date: Thu, 30 Apr 2026 21:12:04 -0600 Subject: [PATCH 3/3] test if no archives are found --- rust/bambam-gtfs/src/schedule/bundle_ops.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/rust/bambam-gtfs/src/schedule/bundle_ops.rs b/rust/bambam-gtfs/src/schedule/bundle_ops.rs index 27139fb3..2d7ac72a 100644 --- a/rust/bambam-gtfs/src/schedule/bundle_ops.rs +++ b/rust/bambam-gtfs/src/schedule/bundle_ops.rs @@ -79,7 +79,16 @@ pub fn batch_process( .collect::, _>>() .map_err(|e| ScheduleError::GtfsApp(format!("failure reading directory: {e}")))?; - let chunk_size = calculate_chunk_size(archive_paths.len(), parallelism); + let n_archives = archive_paths.len(); + if n_archives == 0 { + let msg = format!( + "directory {} is empty", + bundle_directory_path.to_string_lossy() + ); + return Err(ScheduleError::InvalidData(msg)); + } + + let chunk_size = calculate_chunk_size(n_archives, parallelism); // a progress bar shared across threads let bar: Arc> = Arc::new(Mutex::new(