MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / vm_send_migration

Method vm_send_migration

vmm/src/lib.rs:2558–2641  ·  view source on GitHub ↗
(
        &mut self,
        send_data_migration: VmSendMigrationData,
    )

Source from the content-addressed store, hash-verified

2556 }
2557
2558 fn vm_send_migration(
2559 &mut self,
2560 send_data_migration: VmSendMigrationData,
2561 ) -> result::Result<(), MigratableError> {
2562 send_data_migration
2563 .validate()
2564 .context("Invalid send migration configuration")
2565 .map_err(MigratableError::MigrateSend)?;
2566
2567 info!(
2568 "Sending migration: destination_url={},local={},downtime={}ms,timeout={}s,timeout_strategy={:?}",
2569 send_data_migration.destination_url,
2570 send_data_migration.local,
2571 send_data_migration.downtime().as_millis(),
2572 send_data_migration.timeout().as_secs(),
2573 send_data_migration.timeout_strategy
2574 );
2575
2576 if !self
2577 .vm_config
2578 .as_ref()
2579 .unwrap()
2580 .lock()
2581 .unwrap()
2582 .backed_by_shared_memory()
2583 && send_data_migration.local
2584 {
2585 return Err(MigratableError::MigrateSend(anyhow!(
2586 "Local migration requires shared memory or hugepages enabled"
2587 )));
2588 }
2589
2590 let vm = self
2591 .vm
2592 .as_mut()
2593 .ok_or_else(|| MigratableError::MigrateSend(anyhow!("VM is not running")))?;
2594
2595 let initial_vm_state = vm.get_state();
2596 if initial_vm_state != VmState::Running && initial_vm_state != VmState::Paused {
2597 return Err(MigratableError::MigrateSend(anyhow!(
2598 "VM is not running or paused: {initial_vm_state:?}"
2599 )));
2600 }
2601
2602 event!("vm", "migration-started");
2603 Self::send_migration(
2604 vm,
2605 #[cfg(all(feature = "kvm", target_arch = "x86_64"))]
2606 self.hypervisor.as_ref(),
2607 &send_data_migration,
2608 initial_vm_state,
2609 )
2610 .map_err(|migration_err| {
2611 error!("Migration failed: {migration_err:?}");
2612 event!("vm", "migration-failed");
2613
2614 // Stop logging dirty pages only for non-local migrations
2615 if !send_data_migration.local

Callers 1

api_vm_send_migrationMethod · 0.45

Calls 7

contextMethod · 0.80
get_stateMethod · 0.80
validateMethod · 0.45
stop_dirty_logMethod · 0.45
resumeMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected