]> xenbits.xensource.com Git - libvirt.git/commitdiff
capabilities: Allow suppressing error message from virCapabilitiesDomainDataLookup()
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 8 Mar 2024 13:43:13 +0000 (14:43 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 12 Mar 2024 16:39:09 +0000 (17:39 +0100)
In near future we will want to check whether capabilities for
given virtType exist, but report an error on our own. Introduce
reportError argument which makes the function report an error iff
set.

In one specific case (virQEMUCapsGetDefaultVersion()) we were
even overwriting (more specific) error message reportd by
virCapabilitiesDomainDataLookup(). Drop that too.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
src/conf/capabilities.c
src/conf/capabilities.h
src/conf/domain_conf.c
src/libxl/xen_common.c
src/qemu/qemu_capabilities.c

index 02298e40a310aa0754e65800cdfa9c25a421a76b..88c6b84c7cafde7503c5e3fa40bb0ce072309947 100644 (file)
@@ -591,7 +591,8 @@ virCapabilitiesDomainDataLookupInternal(virCaps *caps,
                                         virArch arch,
                                         virDomainVirtType domaintype,
                                         const char *emulator,
-                                        const char *machinetype)
+                                        const char *machinetype,
+                                        bool reportError)
 {
     virCapsGuest *foundguest = NULL;
     virCapsGuestDomain *founddomain = NULL;
@@ -680,6 +681,10 @@ virCapabilitiesDomainDataLookupInternal(virCaps *caps,
     /* XXX check default_emulator, see how it uses this */
     if (!foundguest) {
         g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
+
+        if (!reportError)
+            return NULL;
+
         if (ostype)
             virBufferAsprintf(&buf, "ostype=%s ",
                               virDomainOSTypeToString(ostype));
@@ -699,7 +704,7 @@ virCapabilitiesDomainDataLookupInternal(virCaps *caps,
         virReportError(VIR_ERR_INVALID_ARG,
                        _("could not find capabilities for %1$s"),
                        virBufferCurrentContent(&buf));
-        return ret;
+        return NULL;
     }
 
     ret = g_new0(virCapsDomainData, 1);
@@ -726,6 +731,7 @@ virCapabilitiesDomainDataLookupInternal(virCaps *caps,
  * @domaintype: domain type to search for, of enum virDomainVirtType
  * @emulator: Emulator path to search for
  * @machinetype: Machine type to search for
+ * @reportError: whether to report error if no match is found
  *
  * Search capabilities for the passed values, and if found return
  * virCapabilitiesDomainDataLookup filled in with the default values
@@ -736,7 +742,8 @@ virCapabilitiesDomainDataLookup(virCaps *caps,
                                 virArch arch,
                                 int domaintype,
                                 const char *emulator,
-                                const char *machinetype)
+                                const char *machinetype,
+                                bool reportError)
 {
     virCapsDomainData *ret;
 
@@ -745,14 +752,16 @@ virCapabilitiesDomainDataLookup(virCaps *caps,
         ret = virCapabilitiesDomainDataLookupInternal(caps, ostype,
                                                       caps->host.arch,
                                                       domaintype,
-                                                      emulator, machinetype);
+                                                      emulator, machinetype,
+                                                      reportError);
         if (ret)
             return ret;
     }
 
     return virCapabilitiesDomainDataLookupInternal(caps, ostype,
                                                    arch, domaintype,
-                                                   emulator, machinetype);
+                                                   emulator, machinetype,
+                                                   reportError);
 }
 
 
@@ -767,7 +776,8 @@ virCapabilitiesDomainSupported(virCaps *caps,
     capsdata = virCapabilitiesDomainDataLookup(caps, ostype,
                                                arch,
                                                virttype,
-                                               NULL, NULL);
+                                               NULL, NULL,
+                                               true);
 
     return capsdata != NULL;
 }
index 52e395de145101c7cdc6c994225ef494cb050090..c67b3ce397cf4aef488bea59633d7e6b89822212 100644 (file)
@@ -309,7 +309,8 @@ virCapabilitiesDomainDataLookup(virCaps *caps,
                                 virArch arch,
                                 int domaintype,
                                 const char *emulator,
-                                const char *machinetype);
+                                const char *machinetype,
+                                bool reportError);
 
 bool
 virCapabilitiesDomainSupported(virCaps *caps,
index 3597959e33bf056f7d7bc43ce2f887551c30dd9e..2a64a4a1ade72a5ae77868b8f652b4ded6cbdba4 100644 (file)
@@ -15811,8 +15811,11 @@ virDomainDefGetDefaultEmulator(virDomainDef *def,
     g_autofree virCapsDomainData *capsdata = NULL;
 
     if (!(capsdata = virCapabilitiesDomainDataLookup(caps, def->os.type,
-            def->os.arch, def->virtType, NULL, NULL)))
+                                                     def->os.arch,
+                                                     def->virtType, NULL, NULL,
+                                                     true))) {
         return NULL;
+    }
 
     retemu = g_strdup(capsdata->emulator);
 
index d5a0399613fadc3594574c1b1956de3c78230266..79eb593432a5f4fddfefcf73ad4839e7412bd0c9 100644 (file)
@@ -1387,8 +1387,11 @@ xenParseGeneralMeta(virConf *conf, virDomainDef *def, virCaps *caps)
     }
 
     if (!(capsdata = virCapabilitiesDomainDataLookup(caps, def->os.type,
-            VIR_ARCH_NONE, def->virtType, NULL, NULL)))
+                                                     VIR_ARCH_NONE,
+                                                     def->virtType, NULL,
+                                                     NULL, true))) {
         goto out;
+    }
 
     def->os.arch = capsdata->arch;
     def->os.machine = g_strdup(capsdata->machinetype);
index 60d9a57387b3f5efedbe95ad6f0f4b26da1b202f..208b53fb5ac1213707f1e96e49263469945eac07 100644 (file)
@@ -1784,11 +1784,11 @@ int virQEMUCapsGetDefaultVersion(virCaps *caps,
 
     hostarch = virArchFromHost();
     if (!(capsdata = virCapabilitiesDomainDataLookup(caps,
-            VIR_DOMAIN_OSTYPE_HVM, hostarch, VIR_DOMAIN_VIRT_NONE,
-            NULL, NULL))) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("Cannot find suitable emulator for %1$s"),
-                       virArchToString(hostarch));
+                                                     VIR_DOMAIN_OSTYPE_HVM,
+                                                     hostarch,
+                                                     VIR_DOMAIN_VIRT_NONE,
+                                                     NULL, NULL,
+                                                     true))) {
         return -1;
     }