From b90634a88714066eeb9da446fa7063a2f6623735 Mon Sep 17 00:00:00 2001 From: Philipp Schuster Date: Thu, 5 Mar 2026 21:02:43 +0100 Subject: [PATCH] vmm: migration: emit lifecycle events Emit migration lifecycle events via the event monitor. This aligns migration with other VM lifecycle operations such as boot, pause, and resume, allowing external management software to observe migration progress consistently. Events emitted: src: vm.migration-started vm.migration-finished vm.migration-failed dst: vm.migration-receive-started vm.migration-receive-finished vm.migration-receive-failed Please note that these features are independent of an upcoming new endpoint to fetch migration statistics. Signed-off-by: Philipp Schuster On-behalf-of: SAP philipp.schuster@sap.com --- vmm/src/lib.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/vmm/src/lib.rs b/vmm/src/lib.rs index 96331fffa..bcfa41e27 100644 --- a/vmm/src/lib.rs +++ b/vmm/src/lib.rs @@ -2305,6 +2305,8 @@ impl RequestHandler for Vmm { // Accept the connection and get the socket let mut socket = Vmm::receive_migration_socket(&receive_data_migration.receiver_url)?; + event!("vm", "migration-receive-started"); + let mut state = ReceiveMigrationState::Established; while !state.finished() { @@ -2334,8 +2336,11 @@ impl RequestHandler for Vmm { } if let ReceiveMigrationState::Aborted = state { + event!("vm", "migration-receive-failed"); self.vm = None; self.vm_config = None; + } else { + event!("vm", "migration-receive-finished"); } Ok(()) @@ -2379,6 +2384,7 @@ impl RequestHandler for Vmm { ))); } + event!("vm", "migration-started"); Self::send_migration( vm, #[cfg(all(feature = "kvm", target_arch = "x86_64"))] @@ -2387,6 +2393,7 @@ impl RequestHandler for Vmm { ) .map_err(|migration_err| { error!("Migration failed: {migration_err:?}"); + event!("vm", "migration-failed"); // Stop logging dirty pages only for non-local migrations if !send_data_migration.local @@ -2404,6 +2411,8 @@ impl RequestHandler for Vmm { migration_err })?; + event!("vm", "migration-finished"); + // Shutdown the VM after the migration succeeded self.exit_evt.write(1).map_err(|e| { MigratableError::MigrateSend(anyhow!(