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é <[email protected]>
> ---
> 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,
};
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――