>> Hi all: >> Here's the steps we produce the problem: >> 1 reboot guest with the flag of VIR_DOMAIN_REBOOT_ACPI_POWER_BTN >> 2 sleep 1 second (so that the guest is still rebooting, although the API >already returned.) >> 3 migrate the guest >> >> The problem is that : the guest failed to migrate to the dest, and crashed >on source side. >> >> We don't bother to dig further into the problem, the root cause we think is >that we migrate a guest while it's rebooting. > >Migration is expected to work no matter what state the guest OS is currently >in. So the fact that its rebooting should be irrelevant. If anything bad happens >then its a bug in QEMU most likely > Thanks, Daniel! This answer helps me finds out the right direction. There's one exeption that libvirt may also take response for migration/reboot problems. Because there's cooperation between libvirt and qemu to complete the reboot job: 1 libvirt send "powerdown" qmp command to qemu, and set vm->priv->fakeReboot to 1. 2 the guest starts to shutdown 3 when the guest got shutoff, qemu sends back "shutdown" monitor message to libvirt 4 libvirt got the message, and checks that vm->priv->fakeReboot is 1, then it sends "reset" qmp command to qemu (otherwise sends "poweroff") The reboot job is not atomic, libvirt->qemu->libvirt->qemu, they have several times of message sending/receiving. So, we think of the migration + reboot situation: 1 libvirt send "powerdown" qmp command to qemu, and set vm->priv->fakeReboot to 1. 2 the guest starts to shutdown 3 libvirt migrate the guest to the destination, BUT *priv->fakeReboot is not sended to the dest* 4 the guest is migrated to the dest 5 the guest shutdown completely inside itself, and qemu now sends back "shutdown" monitor message to libvirt 6 libvirt at the dest side got the message, and checks that vm->priv->fakeReboot is 0, then it will send "poweroff" rather than "reset" to qemu, the guest got shutoff rather than rebooted here. EXPECTED: Guest got rebooted on the dest EXACT: Guest got shutoff on the dest. So, shall we send privateData to the dest also? I found that libvirt parses privataData when it reloads/starts, we may also send/parse it during migration? Thanks Zhang Bo(Oscar) -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list