@@ -38,7 +38,7 @@ use std::time::Duration;
3838use libc:: { c_void, siginfo_t} ;
3939use timerfd:: { ClockId , SetTimeFlags , TimerFd , TimerState } ;
4040
41- use api_server:: request:: boot_source:: { BootSourceBody , BootSourceConfigError } ;
41+ use api_server:: request:: boot_source:: BootSourceConfigError ;
4242use api_server:: request:: instance_info:: { InstanceInfo , InstanceState } ;
4343use api_server:: request:: logger:: { APILoggerDescription , APILoggerError , APILoggerLevel } ;
4444use 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