[PATCH 3/6] qemu: conf: Add 'deprecation_behavior' setting to qemu.conf

Peter Krempa pkrempa at redhat.com
Fri Mar 19 18:33:51 UTC 2021


New QEMU supports an harsh, but hard to ignore way to notify that the
QMP user used an deprecated command. This is useful e.g. for developers
to see that something needs to be fixed.

This patch introduces a qemu.conf option to enable the setting in cases
when qemu supports it so that developers and continiuous integration
efforts are notified about use of deprecated fields while it's not late.

The option is deliberately stored as string and not validated to prevent
failures when downgrading qemu or libvirt versions. While we don't
support this, the knob isn't meant for public consumption anyways.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/libvirtd_qemu.aug         |  1 +
 src/qemu/qemu.conf                 | 31 ++++++++++++++++++++++++++++++
 src/qemu/qemu_conf.c               |  4 ++++
 src/qemu/qemu_conf.h               |  2 ++
 src/qemu/test_libvirtd_qemu.aug.in |  1 +
 5 files changed, 39 insertions(+)

diff --git a/src/qemu/libvirtd_qemu.aug b/src/qemu/libvirtd_qemu.aug
index 3c1045858b..0f18775121 100644
--- a/src/qemu/libvirtd_qemu.aug
+++ b/src/qemu/libvirtd_qemu.aug
@@ -131,6 +131,7 @@ module Libvirtd_qemu =

    let debug_level_entry = int_entry "gluster_debug_level"
                  | bool_entry "virtiofsd_debug"
+                 | str_entry "deprecation_behavior"

    let memory_entry = str_entry "memory_backing_dir"

diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf
index 0c1054f198..086d7d2296 100644
--- a/src/qemu/qemu.conf
+++ b/src/qemu/qemu.conf
@@ -922,3 +922,34 @@
 # may change across versions.
 #
 #capability_filters = [ "capname" ]
+
+# 'deprecation_behavior' setting controls how the qemu process behaves towards
+# deprecated commands and arguments used by libvirt.
+#
+# This setting is meant for developers and CI efforts to make it obvious when
+# libvirt relies on fields which are deprecated so that it can be fixes as soon
+# as possible.
+#
+# Possible options are:
+# "none"   - (default) qemu is supposed to accept and output deprecated fields
+#            and commands
+# "omit"   - qemu is instructed to omit deprecated fields on output, behaviour
+#            towards fields and commadns from qemu is not changed
+# "reject" - qemu is instructed to report an error if a deprecated command or
+#            field is used by libvirtd
+# "crash"  - qemu crashes when an deprecated command or field is used by libvirtd
+#
+# For both "reject" and "crash" qemu is instructed to omit any deprecated fields
+# on output.
+#
+# The "reject" option is less harsh towards the VMs but some code paths ignore
+# errors reported by qemu and thus it may not be obvious that a deprecated
+# command/field was used, thus it's suggested to use the "crash" option instead.
+#
+# In cases when qemu doesn't support configuring the behaviour this setting is
+# silently ignored to allow testing older qemu versions without having to
+# reconfigure libvirtd.
+#
+# DO NOT use in production.
+#
+#deprecation_behavior = "none"
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 2bbc75024c..4f7c85cda1 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -380,6 +380,8 @@ static void virQEMUDriverConfigDispose(void *obj)
     g_free(cfg->swtpmStorageDir);

     g_strfreev(cfg->capabilityfilters);
+
+    g_free(cfg->deprecationBehavior);
 }


@@ -869,6 +871,8 @@ virQEMUDriverConfigLoadDebugEntry(virQEMUDriverConfigPtr cfg,
         return -1;
     if (virConfGetValueBool(conf, "virtiofsd_debug", &cfg->virtiofsdDebug) < 0)
         return -1;
+    if (virConfGetValueString(conf, "deprecation_behavior", &cfg->deprecationBehavior) < 0)
+        return -1;

     return 0;
 }
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index 7025b5222e..e62cd88950 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -223,6 +223,8 @@ struct _virQEMUDriverConfig {
     gid_t swtpm_group;

     char **capabilityfilters;
+
+    char *deprecationBehavior;
 };

 G_DEFINE_AUTOPTR_CLEANUP_FUNC(virQEMUDriverConfig, virObjectUnref);
diff --git a/src/qemu/test_libvirtd_qemu.aug.in b/src/qemu/test_libvirtd_qemu.aug.in
index 9310dcec1c..20a89ade32 100644
--- a/src/qemu/test_libvirtd_qemu.aug.in
+++ b/src/qemu/test_libvirtd_qemu.aug.in
@@ -115,3 +115,4 @@ module Test_libvirtd_qemu =
 { "capability_filters"
     { "1" = "capname" }
 }
+{ "deprecation_behavior" = "none" }
-- 
2.29.2




More information about the libvir-list mailing list