Skip to content

Commit fbe9fb7

Browse files
vmm: remove handlers
Added a function for sending the VMM response on a channel. Removed the handle function and moved the code that sends a response in run_vmm_action. Signed-off-by: Andreea Florescu <[email protected]>
1 parent 60857c7 commit fbe9fb7

File tree

1 file changed

+46
-110
lines changed

1 file changed

+46
-110
lines changed

vmm/src/lib.rs

Lines changed: 46 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ use std::time::Duration;
3838
use libc::{c_void, siginfo_t};
3939
use timerfd::{ClockId, SetTimeFlags, TimerFd, TimerState};
4040

41-
use api_server::request::boot_source::{BootSourceBody, BootSourceConfigError};
41+
use api_server::request::boot_source::BootSourceConfigError;
4242
use api_server::request::instance_info::{InstanceInfo, InstanceState};
4343
use api_server::request::logger::{APILoggerDescription, APILoggerError, APILoggerLevel};
4444
use api_server::request::machine_configuration::PutMachineConfigurationError;
@@ -1341,106 +1341,9 @@ impl Vmm {
13411341
Ok(())
13421342
}
13431343

1344-
fn handle_start_microvm(&mut self, sender: OutcomeSender) {
1345-
match self.start_instance() {
1346-
Ok(_) => sender
1347-
.send(Box::new(()))
1348-
.map_err(|_| ())
1349-
.expect("one-shot channel closed"),
1350-
Err(e) => {
1351-
let err_type = match e {
1352-
Error::User(_) => ErrorType::UserError,
1353-
Error::Internal(_) => ErrorType::InternalError,
1354-
};
1355-
1356-
sender
1357-
.send(Box::new(SyncError::InstanceStartFailed(
1358-
err_type,
1359-
format!("Failed to start microVM. {:?}", e),
1360-
))).map_err(|_| ())
1361-
.expect("one-shot channel closed")
1362-
}
1363-
};
1364-
}
1365-
1366-
fn handle_put_drive(&mut self, block_device_config: BlockDeviceConfig, sender: OutcomeSender) {
1367-
sender
1368-
.send(Box::new(self.insert_block_device(block_device_config)))
1369-
.map_err(|_| ())
1370-
.expect("one-shot channel closed");
1371-
}
1372-
1373-
fn handle_patch_drive(
1374-
&mut self,
1375-
drive_id: String,
1376-
path_on_host: String,
1377-
sender: OutcomeSender,
1378-
) {
1379-
sender
1380-
.send(Box::new(self.set_block_device_path(drive_id, path_on_host)))
1381-
.map_err(|_| ())
1382-
.expect("one-shot channel closed");
1383-
}
1384-
1385-
fn handle_put_logger(
1386-
&mut self,
1387-
logger_description: APILoggerDescription,
1388-
sender: OutcomeSender,
1389-
) {
1390-
sender
1391-
.send(Box::new(self.init_logger(logger_description)))
1392-
.map_err(|_| ())
1393-
.expect("one-shot channel closed");
1394-
}
1395-
1396-
fn handle_put_boot_source(&mut self, boot_source_body: BootSourceBody, sender: OutcomeSender) {
1397-
let box_response: Box<GenerateResponse + Send> =
1398-
match boot_source_body.local_image {
1399-
// Check that the kernel path exists and it is valid.
1400-
Some(local_image) => Box::new(self.configure_boot_source(
1401-
local_image.kernel_image_path,
1402-
boot_source_body.boot_args,
1403-
)),
1404-
None => Box::new(BootSourceConfigError::EmptyKernelPath),
1405-
};
1406-
sender
1407-
.send(box_response)
1408-
.map_err(|_| ())
1409-
.expect("one-shot channel closed");
1410-
}
1411-
1412-
fn handle_get_machine_configuration(&self, sender: OutcomeSender) {
1413-
sender
1414-
.send(Box::new(self.vm_config.clone()))
1415-
.map_err(|_| ())
1416-
.expect("one-shot channel closed");
1417-
}
1418-
1419-
fn handle_put_machine_configuration(
1420-
&mut self,
1421-
machine_config_body: MachineConfiguration,
1422-
sender: OutcomeSender,
1423-
) {
1344+
fn send_response(response: Box<GenerateResponse + Send>, sender: OutcomeSender) {
14241345
sender
1425-
.send(Box::new(self.set_vm_configuration(machine_config_body)))
1426-
.map_err(|_| ())
1427-
.expect("one-shot channel closed");
1428-
}
1429-
1430-
fn handle_put_network_interface(
1431-
&mut self,
1432-
netif_body: NetworkInterfaceBody,
1433-
sender: OutcomeSender,
1434-
) {
1435-
sender
1436-
.send(Box::new(self.insert_net_device(netif_body)))
1437-
.map_err(|_| ())
1438-
.expect("one-shot channel closed");
1439-
}
1440-
1441-
fn handle_rescan_block_device(&mut self, drive_id: String, sender: OutcomeSender) {
1442-
sender
1443-
.send(Box::new(self.rescan_block_device(drive_id)))
1346+
.send(response)
14441347
.map_err(|_| ())
14451348
.expect("one-shot channel closed");
14461349
}
@@ -1458,31 +1361,64 @@ impl Vmm {
14581361

14591362
match request {
14601363
VmmAction::ConfigureBootSource(boot_source_body, sender) => {
1461-
self.handle_put_boot_source(boot_source_body, sender)
1364+
let boxed_response = match boot_source_body.local_image {
1365+
// Check that the kernel path exists and it is valid.
1366+
Some(local_image) => Box::new(self.configure_boot_source(
1367+
local_image.kernel_image_path,
1368+
boot_source_body.boot_args,
1369+
)),
1370+
None => Box::new(Err(BootSourceConfigError::EmptyKernelPath)),
1371+
};
1372+
Vmm::send_response(boxed_response, sender);
14621373
}
14631374
VmmAction::ConfigureLogger(logger_description, sender) => {
1464-
self.handle_put_logger(logger_description, sender)
1375+
Vmm::send_response(Box::new(self.init_logger(logger_description)), sender);
14651376
}
14661377
VmmAction::GetMachineConfiguration(sender) => {
1467-
self.handle_get_machine_configuration(sender)
1378+
Vmm::send_response(Box::new(self.vm_config.clone()), sender);
14681379
}
14691380
VmmAction::InsertBlockDevice(block_device_config, sender) => {
1470-
self.handle_put_drive(block_device_config, sender)
1381+
Vmm::send_response(
1382+
Box::new(self.insert_block_device(block_device_config)),
1383+
sender,
1384+
);
14711385
}
14721386
VmmAction::InsertNetworkDevice(netif_body, sender) => {
1473-
self.handle_put_network_interface(netif_body, sender)
1387+
Vmm::send_response(Box::new(self.insert_net_device(netif_body)), sender);
14741388
}
14751389
VmmAction::RescanBlockDevice(drive_id, sender) => {
1476-
self.handle_rescan_block_device(drive_id, sender)
1390+
Vmm::send_response(Box::new(self.rescan_block_device(drive_id)), sender);
1391+
}
1392+
VmmAction::StartMicroVm(sender) => {
1393+
let boxed_response = match self.start_instance() {
1394+
Ok(_) => Box::new(Ok(())),
1395+
Err(e) => {
1396+
let err_type = match e {
1397+
Error::User(_) => ErrorType::UserError,
1398+
Error::Internal(_) => ErrorType::InternalError,
1399+
};
1400+
1401+
Box::new(Err(SyncError::InstanceStartFailed(
1402+
err_type,
1403+
format!("Failed to start microVM. {:?}", e),
1404+
)))
1405+
}
1406+
};
1407+
Vmm::send_response(boxed_response, sender);
14771408
}
1478-
VmmAction::StartMicroVm(sender) => self.handle_start_microvm(sender),
14791409
VmmAction::SetVmConfiguration(machine_config_body, sender) => {
1480-
self.handle_put_machine_configuration(machine_config_body, sender)
1410+
Vmm::send_response(
1411+
Box::new(self.set_vm_configuration(machine_config_body)),
1412+
sender,
1413+
);
14811414
}
14821415
VmmAction::UpdateDrivePath(drive_id, path_on_host, sender) => {
1483-
self.handle_patch_drive(drive_id, path_on_host, sender)
1416+
Vmm::send_response(
1417+
Box::new(self.set_block_device_path(drive_id, path_on_host)),
1418+
sender,
1419+
);
14841420
}
1485-
}
1421+
};
14861422

14871423
Ok(())
14881424
}

0 commit comments

Comments
 (0)