]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
admin: Introduce virAdmConnectSetDaemonTimeout
authorPeter Krempa <pkrempa@redhat.com>
Mon, 13 Jun 2022 11:02:09 +0000 (13:02 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 7 Jul 2022 12:35:30 +0000 (14:35 +0200)
Use of the admin APIs to modify logging temporarily has a rather serious
deficiency when the daemon whose config is being changed is using
auto-shutdown (default with socket-activated deployments) as the
configuration is discarded if there is no client or VM/other object
blocking auto shutdown.

This API allows users to disable/postpone shutdown timeout so that the
configuration doesn't change under their hands.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
include/libvirt/libvirt-admin.h
src/admin/admin_protocol.x
src/admin/admin_server_dispatch.c
src/admin/libvirt-admin.c
src/admin/libvirt_admin_public.syms
src/admin_protocol-structs

index 85336589326fba72822e06f0ece14ee77b9f42e5..ae4703f89bd3060004d76e730538db74921d4f34 100644 (file)
@@ -480,6 +480,10 @@ int virAdmConnectSetLoggingFilters(virAdmConnectPtr conn,
                                    const char *filters,
                                    unsigned int flags);
 
+int virAdmConnectSetDaemonTimeout(virAdmConnectPtr conn,
+                                  unsigned int timeout,
+                                  unsigned int flags);
+
 # ifdef __cplusplus
 }
 # endif
index 7dc672403201be72b2659967246642b59ad7a4a3..f3130efd2d57d54dc9e8be96b0d9fd3dc485e405 100644 (file)
@@ -214,6 +214,11 @@ struct admin_connect_set_logging_filters_args {
     unsigned int flags;
 };
 
+struct admin_connect_set_daemon_timeout_args {
+    unsigned int timeout;
+    unsigned int flags;
+};
+
 /* Define the program number, protocol version and procedure numbers here. */
 const ADMIN_PROGRAM = 0x06900690;
 const ADMIN_PROTOCOL_VERSION = 1;
@@ -324,5 +329,10 @@ enum admin_procedure {
     /**
      * @generate: both
      */
-    ADMIN_PROC_SERVER_UPDATE_TLS_FILES = 18
+    ADMIN_PROC_SERVER_UPDATE_TLS_FILES = 18,
+
+    /**
+     * @generate: both
+     */
+    ADMIN_PROC_CONNECT_SET_DAEMON_TIMEOUT = 19
 };
index 8c34586ab302dde7f769e7acea840304dd41a086..b3e7be89658bb5fb235011b9c0d09f2d1d7d8be8 100644 (file)
@@ -463,6 +463,18 @@ adminConnectSetLoggingFilters(virNetDaemon *dmn G_GNUC_UNUSED,
     return virLogSetFilters(filters);
 }
 
+
+static int
+adminConnectSetDaemonTimeout(virNetDaemon *dmn,
+                             unsigned int timeout,
+                             unsigned int flags)
+{
+    virCheckFlags(0, -1);
+
+    return virNetDaemonAutoShutdown(dmn, timeout);
+}
+
+
 static int
 adminDispatchConnectGetLoggingOutputs(virNetServer *server G_GNUC_UNUSED,
                                       virNetServerClient *client G_GNUC_UNUSED,
index e7f005fda0a0b8eff5b628aee89d49420104ea86..6baaea4ff2c7d5c78bb62509bf1f33f96ff2d94c 100644 (file)
@@ -1327,3 +1327,37 @@ virAdmConnectSetLoggingFilters(virAdmConnectPtr conn,
     virDispatchError(NULL);
     return -1;
 }
+
+
+/**
+ * virAdmConnectSetDaemonTimeout:
+ * @conn: pointer to an active admin connection
+ * @timeout: timeout to set in seconds (0 disables timeout)
+ * @flags: extra flags; not used yet, so callers should always pass 0
+ *
+ * Reconfigure the existing timeout of the daemon to @timeout. Setting timeout
+ * to 0 disables the daemon timeout.
+ *
+ * Returns 0 on success, -1 on error.
+ *
+ * Since: 8.6.0
+ */
+int
+virAdmConnectSetDaemonTimeout(virAdmConnectPtr conn,
+                              unsigned int timeout,
+                              unsigned int flags)
+{
+    int ret;
+
+    VIR_DEBUG("conn=%p, timeout=%u, flags=0x%x", conn, timeout, flags);
+
+    virResetLastError();
+    virCheckAdmConnectReturn(conn, -1);
+
+    if ((ret = remoteAdminConnectSetDaemonTimeout(conn, timeout, flags)) < 0) {
+        virDispatchError(NULL);
+        return -1;
+    }
+
+    return ret;
+}
index 8126973e5bb980b97fd31b5da236381362f86eaa..17930e4fac849bd35c789adf7d085966d7db4c1c 100644 (file)
@@ -48,3 +48,8 @@ LIBVIRT_ADMIN_3.0.0 {
         virAdmConnectSetLoggingOutputs;
         virAdmConnectSetLoggingFilters;
 } LIBVIRT_ADMIN_2.0.0;
+
+LIBVIRT_ADMIN_8.6.0 {
+    global:
+        virAdmConnectSetDaemonTimeout;
+} LIBVIRT_ADMIN_3.0.0;
index 76c511babfc82d7d3422d96fd8e6054a7c390a1b..8caac5982409704a456a8d2b3bd799ae6b7117dd 100644 (file)
@@ -144,6 +144,10 @@ struct admin_connect_set_logging_filters_args {
         admin_string               filters;
         u_int                      flags;
 };
+struct admin_connect_set_daemon_timeout_args {
+        u_int                      timeout;
+        u_int                      flags;
+};
 enum admin_procedure {
         ADMIN_PROC_CONNECT_OPEN = 1,
         ADMIN_PROC_CONNECT_CLOSE = 2,
@@ -163,4 +167,5 @@ enum admin_procedure {
         ADMIN_PROC_CONNECT_SET_LOGGING_OUTPUTS = 16,
         ADMIN_PROC_CONNECT_SET_LOGGING_FILTERS = 17,
         ADMIN_PROC_SERVER_UPDATE_TLS_FILES = 18,
+        ADMIN_PROC_CONNECT_SET_DAEMON_TIMEOUT       = 19,
 };