On Wed, Jan 08, 2025 at 19:42:57 +0000, Daniel P. Berrangé wrote:
The daemons are wired up to shutdown in responsible to UNIX process
signals, as well as in response to login1 dbus signals, or loss of
desktop session. The latter two options can optionally preserve state
(ie running VMs).
In non-systemd environments, as well as for testing, it would be useful
to have a way to trigger shutdown with state preservation more directly.
Thus a new admin protocol API is introduced
virAdmConnectDaemonShutdown
which will trigger a daemon shutdown, and preserve running VMs if the
VIR_DAEMON_SHUTDOWN_PRESERVE flag is set.
It has a corresponding 'virt-admin daemon-shutdown [--preserve]' command
binding.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
include/libvirt/libvirt-admin.h | 13 +++++++++
src/admin/admin_protocol.x | 11 +++++++-
src/admin/admin_server_dispatch.c | 13 +++++++++
src/admin/libvirt-admin.c | 33 +++++++++++++++++++++++
src/admin/libvirt_admin_public.syms | 5 ++++
src/rpc/virnetdaemon.c | 4 +++
tools/virt-admin.c | 41 +++++++++++++++++++++++++++++
7 files changed, 119 insertions(+), 1 deletion(-)
Test failure after this patch (and also present at the end of the
series):
ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 LC_CTYPE=en_US.UTF-8
UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1
LC_ALL=''
MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 LANG=C
MALLOC_PERTURB_=118 MESON_TEST_ITERATION=1 /bin/python3
/home/pipo/libvirt/scripts/check-remote-protocol.py admin_protocol virt_admin_driver
/home/pipo/build/libvirt/gcc/src/admin/libvirt_admin_driver.a /bin/pdwtags
/home/pipo/build/libvirt/gcc/../../../libvirt/src/admin_protocol-structs
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
✀
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
--- /home/pipo/build/libvirt/gcc/../../../libvirt/src/admin_protocol-structs 2024-11-15
08:32:02.517209576 +0100
+++ - 2025-01-30 10:34:46.127808492 +0100
@@ -148,6 +148,9 @@
u_int timeout;
u_int flags;
};
+struct admin_connect_daemon_shutdown_args {
+ u_int flags;
+};
enum admin_procedure {
ADMIN_PROC_CONNECT_OPEN = 1,
ADMIN_PROC_CONNECT_CLOSE = 2,
@@ -168,4 +171,5 @@
ADMIN_PROC_CONNECT_SET_LOGGING_FILTERS = 17,
ADMIN_PROC_SERVER_UPDATE_TLS_FILES = 18,
ADMIN_PROC_CONNECT_SET_DAEMON_TIMEOUT = 19,
+ ADMIN_PROC_CONNECT_DAEMON_SHUTDOWN = 20,
};
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――