]> git.proxmox.com Git - qemu-server.git/commit
qmeventd: add handling for -no-shutdown QEMU instances
authorStefan Reiter <s.reiter@proxmox.com>
Mon, 19 Oct 2020 12:18:36 +0000 (14:18 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 5 Nov 2020 10:22:47 +0000 (11:22 +0100)
commit3ff85001752dc8d3d8cb30d19202beaaca08a20a
treecbac291abe62791aacb4a2e7039d043ded9e56c3
parentacfc6ef8e060f8f92e9f1bdbd40169fb78b03202
qmeventd: add handling for -no-shutdown QEMU instances

We take care of killing QEMU processes when a guest shuts down manually.
QEMU will not exit itself, if started with -no-shutdown, but it will
still emit a "SHUTDOWN" event, which we await and then send SIGTERM.

This additionally allows us to handle backups in such situations. A
vzdump instance will connect to our socket and identify itself as such
in the handshake, sending along a VMID which will be marked as backing
up until the file handle is closed.

When a SHUTDOWN event is received while the VM is backing up, we do not
kill the VM. And when the vzdump handle is closed, we check if the
guest has started up since, and only if it's determined to still be
turned off, we then finally kill QEMU.

We cannot wait for QEMU directly to finish the backup (i.e. with
query-backup), as that would kill the VM too fast for vzdump to send the
last 'query-backup' to mark the backup as successful and done.

For handling 'query-status' messages sent to QEMU, a state-machine-esque
protocol is implemented into the Client struct (ClientState). This is
necessary, since QMP works asynchronously, and results arrive on the
same channel as events and even the handshake.

For referencing QEMU Clients from vzdump messages, they are kept in a
hash table. This requires linking against glib.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
debian/control
qmeventd/Makefile
qmeventd/qmeventd.c
qmeventd/qmeventd.h