Eric Blake <[email protected]> writes: > Libvirt would like to be able to distinguish between a SHUTDOWN > event triggered solely by guest request and one triggered by a > SIGTERM or other action on the host. While qemu_kill_report() was > already able to give different output to stderr based on whether a > shutdown was triggered by a host signal (but NOT by a host UI event, > such as clicking the X on the window), that information was then > lost to management. The previous patches improved things to use an > enum throughout all callsites, so now we have something ready to > expose through QMP. > > Note that for now, the decision was to expose ONLY a boolean, > rather than promoting ShutdownCause to a QAPI enum; this is because > libvirt has not expressed an interest in anything finer-grained. > We can still add additional details, in a backwards-compatible > manner, if a need later arises (if the addition happens before 2.10, > we can replace the bool with an enum; otherwise, the enum will have > to be in addition to the bool); this patch merely adds a helper > shutdown_caused_by_guest() to map the internal enum into the > external boolean. > > Update expected iotest outputs to match the new data (complete > coverage of the affected tests is obtained by -raw, -qcow2, and -nbd). > > Here is output from 'virsh qemu-monitor-event --loop' with the > patch installed: > > event SHUTDOWN at 1492639680.731251 for domain fedora_13: {"guest":true} > event STOP at 1492639680.732116 for domain fedora_13: <null> > event SHUTDOWN at 1492639680.732830 for domain fedora_13: {"guest":false} > > Note that libvirt runs qemu with -no-shutdown: the first SHUTDOWN event > was triggered by an action I took directly in the guest (shutdown -h), > at which point qemu stops the vcpus and waits for libvirt to do any > final cleanups; the second SHUTDOWN event is the result of libvirt > sending SIGTERM now that it has completed cleanup. Libvirt is already > smart enough to only feed the first qemu SHUTDOWN event to the end user > (remember, virsh qemu-monitor-event is a low-level debugging interface > that is explicitly unsupported by libvirt, so it sees things that normal > end users do not); changing qemu to emit SHUTDOWN only once is outside > the scope of this series. > > See also https://bugzilla.redhat.com/1384007 > > Signed-off-by: Eric Blake <[email protected]>
Reviewed-by: Markus Armbruster <[email protected]>
