[libvirt] [PATCH 06/11] qemu: move libvirt ctime and version check into virQEMUCapsIsValid

Pavel Hrdina posted 11 patches 7 years, 10 months ago
There is a newer version of this series
[libvirt] [PATCH 06/11] qemu: move libvirt ctime and version check into virQEMUCapsIsValid
Posted by Pavel Hrdina 7 years, 10 months ago
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
---
 src/qemu/qemu_capabilities.c | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 8a2a73dc5b..4d8890aaaf 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -4293,6 +4293,18 @@ virQEMUCapsIsValid(virQEMUCapsPtr qemuCaps,
     if (!qemuCaps->binary)
         return true;
 
+    if (qemuCaps->libvirtCtime != virGetSelfLastChanged() ||
+        qemuCaps->libvirtVersion != LIBVIR_VERSION_NUMBER) {
+        VIR_DEBUG("Outdated capabilities for '%s': libvirt changed "
+                  "(%lld vs %lld, %lu vs %lu)",
+                  qemuCaps->binary,
+                  (long long)qemuCaps->libvirtCtime,
+                  (long long)virGetSelfLastChanged(),
+                  (unsigned long)qemuCaps->libvirtVersion,
+                  (unsigned long)LIBVIR_VERSION_NUMBER);
+        return false;
+    }
+
     if (!qemuctime) {
         struct stat sb;
 
@@ -4393,19 +4405,6 @@ virQEMUCapsInitCached(virCapsPtr caps,
     if (!virQEMUCapsIsValid(qemuCaps, qemuctime, runUid, runGid))
         goto discard;
 
-    /* Discard cache if QEMU binary or libvirtd changed */
-    if (qemuCaps->libvirtCtime != virGetSelfLastChanged() ||
-        qemuCaps->libvirtVersion != LIBVIR_VERSION_NUMBER) {
-        VIR_DEBUG("Outdated capabilities for '%s': libvirt changed "
-                  "(%lld vs %lld, %lu vs %lu)",
-                  qemuCaps->binary,
-                  (long long)qemuCaps->libvirtCtime,
-                  (long long)virGetSelfLastChanged(),
-                  (unsigned long)qemuCaps->libvirtVersion,
-                  (unsigned long)LIBVIR_VERSION_NUMBER);
-        goto discard;
-    }
-
     VIR_DEBUG("Loaded '%s' for '%s' ctime %lld usedQMP=%d",
               capsfile, qemuCaps->binary,
               (long long)qemuCaps->ctime, qemuCaps->usedQMP);
-- 
2.13.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 06/11] qemu: move libvirt ctime and version check into virQEMUCapsIsValid
Posted by Jiri Denemark 7 years, 10 months ago
On Mon, Jul 10, 2017 at 14:46:45 +0200, Pavel Hrdina wrote:
> Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
> ---
>  src/qemu/qemu_capabilities.c | 25 ++++++++++++-------------
>  1 file changed, 12 insertions(+), 13 deletions(-)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 8a2a73dc5b..4d8890aaaf 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -4293,6 +4293,18 @@ virQEMUCapsIsValid(virQEMUCapsPtr qemuCaps,
>      if (!qemuCaps->binary)
>          return true;
>  
> +    if (qemuCaps->libvirtCtime != virGetSelfLastChanged() ||
> +        qemuCaps->libvirtVersion != LIBVIR_VERSION_NUMBER) {
> +        VIR_DEBUG("Outdated capabilities for '%s': libvirt changed "
> +                  "(%lld vs %lld, %lu vs %lu)",
> +                  qemuCaps->binary,
> +                  (long long)qemuCaps->libvirtCtime,
> +                  (long long)virGetSelfLastChanged(),
> +                  (unsigned long)qemuCaps->libvirtVersion,
> +                  (unsigned long)LIBVIR_VERSION_NUMBER);
> +        return false;
> +    }
> +

This change causes libvirt's ctime to be compared everytime the cache is
looked up (in virQEMUCapsCacheValidate). This looked fishy, but
virGetSelfLastChanged returns cached ctime fetched only once when
libvirtd starts.

Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list