[libvirt] [PATCH] qemu: Introduce shutdown reason for paused state
Eric Blake
eblake at redhat.com
Thu Sep 15 14:10:58 UTC 2011
On 09/15/2011 07:29 AM, Jiri Denemark wrote:
> Qemu sends STOP event as part of the shutdown process. Detect such STOP
> event and consider shutdown to be reason of emitting such event. That's
> the best we can do until qemu provides us the reason directly in STOP
> event. This allows us to report shutdown reason for paused state so that
> apps can detect domains that failed to finish the shutdown process
> (e.g., because qemu is buggy and doesn't exit on SIGTERM or it is
> blocked in flushing disk buffers).
> ---
> include/libvirt/libvirt.h.in | 1 +
> src/conf/domain_conf.c | 5 +++--
> src/libvirt_private.syms | 12 ++++++++++++
> src/qemu/qemu_process.c | 14 +++++++++++---
> tools/virsh.c | 2 ++
> 5 files changed, 29 insertions(+), 5 deletions(-)
>
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index ea7b3fc..39155a6 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -124,6 +124,7 @@ typedef enum {
> VIR_DOMAIN_PAUSED_IOERROR = 5, /* paused due to a disk I/O error */
> VIR_DOMAIN_PAUSED_WATCHDOG = 6, /* paused due to a watchdog event */
> VIR_DOMAIN_PAUSED_FROM_SNAPSHOT = 7, /* paused after restoring from snapshot */
> + VIR_DOMAIN_PAUSED_SHUTTING_DOWN = 8, /* paused during shutdown process */
> } virDomainPausedReason;
>
> typedef enum {
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index ea6b581..ad2a730 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -487,7 +487,7 @@ VIR_ENUM_IMPL(virDomainRunningReason, VIR_DOMAIN_RUNNING_LAST,
> VIR_ENUM_IMPL(virDomainBlockedReason, VIR_DOMAIN_BLOCKED_LAST,
> "unknown")
>
> -#define VIR_DOMAIN_PAUSED_LAST (VIR_DOMAIN_PAUSED_FROM_SNAPSHOT + 1)
> +#define VIR_DOMAIN_PAUSED_LAST (VIR_DOMAIN_PAUSED_SHUTTING_DOWN + 1)
We have several other instances of *_LAST defined in libvirt.h.in as
part of the enum, instead of a #define here; but this is a minimal
change and doesn't make the situation any worse.
> +++ b/src/libvirt_private.syms
> @@ -231,6 +231,8 @@ virDiskNameToBusDeviceIndex;
> virDiskNameToIndex;
> virDomainActualNetDefFree;
> virDomainAssignDef;
> +virDomainBlockedReasonTypeFromString;
> +virDomainBlockedReasonTypeToString;
Looks like we forgot to export these earlier; this could almost be a
separate patch, but I'm okay keeping it in one.
ACK.
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
More information about the libvir-list
mailing list