aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordiogo464 <[email protected]>2025-07-11 16:27:18 +0100
committerdiogo464 <[email protected]>2025-07-11 16:27:18 +0100
commitd963becfada6eb81536e462f6e79cfc389c917a4 (patch)
tree3cfa5c1190b616fd00ab9860ec1335fe38f8bbc0 /src
parenta99af8dc92e33c7db358b38a4b5135442b4ecac1 (diff)
fix: add error handling for latency matrix dimension check
Diffstat (limited to 'src')
-rw-r--r--src/main.rs16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs
index 25d9d13..58088ec 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -155,7 +155,7 @@ async fn cmd_net_up(args: NetUpArgs) -> Result<()> {
155 let matrix = LatencyMatrix::parse(&matrix_content, latency_matrix::TimeUnit::Milliseconds) 155 let matrix = LatencyMatrix::parse(&matrix_content, latency_matrix::TimeUnit::Milliseconds)
156 .context("parsing latency matrix")?; 156 .context("parsing latency matrix")?;
157 let machines = oar::job_list_machines(&context).await?; 157 let machines = oar::job_list_machines(&context).await?;
158 let configs = machine_generate_configs(&matrix, &machines, &args.addresses); 158 let configs = machine_generate_configs(&matrix, &machines, &args.addresses)?;
159 machines_net_container_build(&context, &machines).await?; 159 machines_net_container_build(&context, &machines).await?;
160 machines_clean(&context, &machines).await?; 160 machines_clean(&context, &machines).await?;
161 machines_configure(&context, &configs).await?; 161 machines_configure(&context, &configs).await?;
@@ -199,7 +199,7 @@ async fn cmd_net_preview(args: NetPreviewArgs) -> Result<()> {
199 let matrix = LatencyMatrix::parse(&matrix_content, latency_matrix::TimeUnit::Milliseconds) 199 let matrix = LatencyMatrix::parse(&matrix_content, latency_matrix::TimeUnit::Milliseconds)
200 .context("parsing latency matrix")?; 200 .context("parsing latency matrix")?;
201 let machines = args.machine; 201 let machines = args.machine;
202 let configs = machine_generate_configs(&matrix, &machines, &args.addresses); 202 let configs = machine_generate_configs(&matrix, &machines, &args.addresses)?;
203 203
204 for config in configs { 204 for config in configs {
205 (0..20).for_each(|_| print!("-")); 205 (0..20).for_each(|_| print!("-"));
@@ -767,7 +767,7 @@ fn machine_generate_configs(
767 matrix: &LatencyMatrix, 767 matrix: &LatencyMatrix,
768 machines: &[Machine], 768 machines: &[Machine],
769 addr_policy: &AddressAllocationPolicy, 769 addr_policy: &AddressAllocationPolicy,
770) -> Vec<MachineConfig> { 770) -> Result<Vec<MachineConfig>> {
771 let mut configs = Vec::default(); 771 let mut configs = Vec::default();
772 let mut addresses = Vec::default(); 772 let mut addresses = Vec::default();
773 let mut address_to_index = HashMap::<Ipv4Addr, usize>::default(); 773 let mut address_to_index = HashMap::<Ipv4Addr, usize>::default();
@@ -813,6 +813,14 @@ fn machine_generate_configs(
813 .push(address); 813 .push(address);
814 } 814 }
815 815
816 if addresses.len() > matrix.dimension() {
817 return Err(eyre::eyre!(
818 "latency matrix is too small, size is {} but {} was required",
819 matrix.dimension(),
820 addresses.len()
821 ));
822 }
823
816 for &machine in machines { 824 for &machine in machines {
817 let machine_addresses = &addresses_per_machine[&machine]; 825 let machine_addresses = &addresses_per_machine[&machine];
818 let mut machine_ip_commands = Vec::default(); 826 let mut machine_ip_commands = Vec::default();
@@ -908,5 +916,5 @@ fn machine_generate_configs(
908 ip_commands: machine_ip_commands, 916 ip_commands: machine_ip_commands,
909 }); 917 });
910 } 918 }
911 configs 919 Ok(configs)
912} 920}