[libvirt] [PATCH 6/8] qemu: Unify cached caps validity checks

Daniel P. Berrange berrange at redhat.com
Fri Nov 4 10:34:44 UTC 2016


On Wed, Nov 02, 2016 at 10:22:35AM +0100, Jiri Denemark wrote:
> Let's keep all run time validation of cached QEMU capabilities in
> virQEMUCapsIsValid and call it whenever we access the cache.
> virQEMUCapsInitCached should keep only the checks which do not make
> sense once the cache is loaded in memory.
> 
> Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> ---
>  src/qemu/qemu_capabilities.c | 59 ++++++++++++++++++++++++++++++--------------
>  src/qemu/qemu_capabilities.h |  3 ++-
>  2 files changed, 42 insertions(+), 20 deletions(-)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 91e8b30..d1c31ad 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -3516,25 +3516,21 @@ virQEMUCapsInitCached(virCapsPtr caps,
>          VIR_WARN("Failed to load cached caps from '%s' for '%s': %s",
>                   capsfile, qemuCaps->binary, virGetLastErrorMessage());
>          virResetLastError();
> -        ret = 0;
> -        virQEMUCapsReset(qemuCaps);
> -        goto cleanup;
> +        goto discard;
>      }
>  
> +    if (!virQEMUCapsIsValid(qemuCaps, qemuctime))
> +        goto discard;
> +
>      /* Discard cache if QEMU binary or libvirtd changed */
> -    if (qemuctime != qemuCaps->ctime ||
> -        selfctime != virGetSelfLastChanged() ||
> +    if (selfctime != virGetSelfLastChanged() ||
>          selfvers != LIBVIR_VERSION_NUMBER) {
> -        VIR_DEBUG("Outdated cached capabilities '%s' for '%s' "
> -                  "(%lld vs %lld, %lld vs %lld, %lu vs %lu)",
> +        VIR_DEBUG("Dropping cached capabilities '%s' for '%s': "
> +                  "libvirt changed (%lld vs %lld, %lu vs %lu)",
>                    capsfile, qemuCaps->binary,
> -                  (long long)qemuCaps->ctime, (long long)qemuctime,
>                    (long long)selfctime, (long long)virGetSelfLastChanged(),
>                    selfvers, (unsigned long)LIBVIR_VERSION_NUMBER);
> -        ignore_value(unlink(capsfile));
> -        virQEMUCapsReset(qemuCaps);
> -        ret = 0;
> -        goto cleanup;
> +        goto discard;
>      }
>  
>      VIR_DEBUG("Loaded '%s' for '%s' ctime %lld usedQMP=%d",
> @@ -3548,6 +3544,12 @@ virQEMUCapsInitCached(virCapsPtr caps,
>      VIR_FREE(capsfile);
>      VIR_FREE(capsdir);
>      return ret;
> +
> + discard:
> +    ignore_value(unlink(capsfile));
> +    virQEMUCapsReset(qemuCaps);
> +    ret = 0;
> +    goto cleanup;
>  }
>  
>  
> @@ -4111,17 +4113,36 @@ virQEMUCapsNewForBinary(virCapsPtr caps,
>  }
>  
>  
> -bool virQEMUCapsIsValid(virQEMUCapsPtr qemuCaps)
> +bool
> +virQEMUCapsIsValid(virQEMUCapsPtr qemuCaps,
> +                   time_t ctime)

This broke the build on RHEL-6


c1: warnings being treated as errors
../../src/qemu/qemu_capabilities.c: In function 'virQEMUCapsIsValid':
../../src/qemu/qemu_capabilities.c:4085: error: declaration of 'ctime' shadows a global declaration [-Wshadow]
/usr/include/time.h:258: error: shadowed declaration is here [-Wshadow]


We should just call this qemuctime, as done elsewhere to avoid the
clash.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://entangle-photo.org       -o-    http://search.cpan.org/~danberr/ :|




More information about the libvir-list mailing list