Skip to content

Commit 0c22320

Browse files
parallelize VM allocations in Farm
1 parent 74bd790 commit 0c22320

File tree

1 file changed

+23
-9
lines changed

1 file changed

+23
-9
lines changed

rs/tests/src/driver/resource.rs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -221,12 +221,14 @@ pub fn get_resource_request_for_universal_vm(
221221
}
222222

223223
pub fn allocate_resources(farm: &Farm, req: &ResourceRequest) -> FarmResult<ResourceGroup> {
224-
let group_name = &req.group_name;
225-
let mut res_group = ResourceGroup::new(group_name.clone());
224+
let group_name = req.group_name.clone();
225+
// Create VMs in parallel via Farm.
226+
let mut threads = vec![];
226227
for vm_config in req.vm_configs.iter() {
227-
let name = vm_config.name.clone();
228+
let farm_cloned = farm.clone();
229+
let vm_name = vm_config.name.clone();
228230
let create_vm_request = CreateVmRequest::new(
229-
name.clone(),
231+
vm_name.clone(),
230232
VmType::Production,
231233
vm_config.vcpus,
232234
vm_config.memory_kibibytes,
@@ -240,13 +242,25 @@ pub fn allocate_resources(farm: &Farm, req: &ResourceRequest) -> FarmResult<Reso
240242
vm_config.vm_allocation.clone(),
241243
vm_config.required_host_features.clone(),
242244
);
243-
244-
let created_vm = farm.create_vm(group_name, create_vm_request)?;
245+
let group_name = group_name.clone();
246+
// Spin up another thread
247+
threads.push(std::thread::spawn(move || {
248+
(
249+
vm_name,
250+
farm_cloned.create_vm(&group_name, create_vm_request),
251+
)
252+
}));
253+
}
254+
let mut res_group = ResourceGroup::new(group_name.clone());
255+
for thread in threads {
256+
let (vm_name, created_vm) = thread
257+
.join()
258+
.expect("Couldn't join on the associated thread");
245259
res_group.add_vm(AllocatedVm {
246-
name,
260+
name: vm_name,
247261
group_name: group_name.clone(),
248-
ipv6: created_vm.ipv6,
249-
});
262+
ipv6: created_vm?.ipv6,
263+
})
250264
}
251265
Ok(res_group)
252266
}

0 commit comments

Comments
 (0)