[PATCH 4/5] conf: checkpoint: Prepare internals for missing domain definition

Daniel Henrique Barboza danielhb413 at gmail.com
Fri Dec 4 12:53:22 UTC 2020



On 12/2/20 11:13 AM, Peter Krempa wrote:
> Coniditonalize code which assumes that the domain definition stored in

s/Coniditonalize/Conditionalize

> the checkpoint is present.
> 
> Signed-off-by: Peter Krempa <pkrempa at redhat.com>
> ---


Reviewed-by: Daniel Henrique Barboza <danielhb413 at gmail.com>


>   src/conf/checkpoint_conf.c              | 31 +++++++++++++------------
>   tests/qemudomaincheckpointxml2xmltest.c |  5 ----
>   2 files changed, 16 insertions(+), 20 deletions(-)
> 
> diff --git a/src/conf/checkpoint_conf.c b/src/conf/checkpoint_conf.c
> index 73fdb78e7a..2071494d52 100644
> --- a/src/conf/checkpoint_conf.c
> +++ b/src/conf/checkpoint_conf.c
> @@ -475,10 +475,10 @@ virDomainCheckpointDefFormatInternal(virBufferPtr buf,
>           virBufferAddLit(buf, "</disks>\n");
>       }
> 
> -    if (!(flags & VIR_DOMAIN_CHECKPOINT_FORMAT_NO_DOMAIN) &&
> -        virDomainDefFormatInternal(def->parent.dom, xmlopt,
> -                                   buf, domainflags) < 0)
> -        return -1;
> +    if (def->parent.dom && !(flags & VIR_DOMAIN_CHECKPOINT_FORMAT_NO_DOMAIN)) {
> +        if (virDomainDefFormatInternal(def->parent.dom, xmlopt, buf, domainflags) < 0)
> +            return -1;
> +    }
> 
>       virBufferAdjustIndent(buf, -2);
>       virBufferAddLit(buf, "</domaincheckpoint>\n");
> @@ -510,23 +510,24 @@ virDomainCheckpointRedefinePrep(virDomainObjPtr vm,
>                                   virDomainCheckpointDefPtr def,
>                                   bool *update_current)
>   {
> -    char uuidstr[VIR_UUID_STRING_BUFLEN];
>       virDomainMomentObjPtr parent = NULL;
> 
> -    virUUIDFormat(vm->def->uuid, uuidstr);
> -
>       if (virDomainCheckpointCheckCycles(vm->checkpoints, def, vm->def->name) < 0)
>           return -1;
> 
> -    if (!def->parent.dom ||
> -        memcmp(def->parent.dom->uuid, vm->def->uuid, VIR_UUID_BUFLEN)) {
> -        virReportError(VIR_ERR_INVALID_ARG,
> -                       _("definition for checkpoint %s must use uuid %s"),
> -                       def->parent.name, uuidstr);
> -        return -1;
> +    if (def->parent.dom) {
> +        if (memcmp(def->parent.dom->uuid, vm->def->uuid, VIR_UUID_BUFLEN)) {
> +            char uuidstr[VIR_UUID_STRING_BUFLEN];
> +            virUUIDFormat(vm->def->uuid, uuidstr);
> +            virReportError(VIR_ERR_INVALID_ARG,
> +                           _("definition for checkpoint %s must use uuid %s"),
> +                           def->parent.name, uuidstr);
> +            return -1;
> +        }
> +
> +        if (virDomainCheckpointAlignDisks(def) < 0)
> +            return -1;
>       }
> -    if (virDomainCheckpointAlignDisks(def) < 0)
> -        return -1;
> 
>       if (def->parent.parent_name &&
>            (parent = virDomainCheckpointFindByName(vm->checkpoints,
> diff --git a/tests/qemudomaincheckpointxml2xmltest.c b/tests/qemudomaincheckpointxml2xmltest.c
> index a5a5b59205..8b4b75d753 100644
> --- a/tests/qemudomaincheckpointxml2xmltest.c
> +++ b/tests/qemudomaincheckpointxml2xmltest.c
> @@ -87,11 +87,6 @@ testCompareXMLToXMLFiles(const char *inxml,
>           formatflags |= VIR_DOMAIN_CHECKPOINT_FORMAT_SIZE;
>       }
> 
> -    /* Parsing XML does not populate the domain definition; work
> -     * around that by not requesting domain on output */
> -    if (!def->parent.dom)
> -        formatflags |= VIR_DOMAIN_CHECKPOINT_FORMAT_NO_DOMAIN;
> -
>       if (!(actual = virDomainCheckpointDefFormat(def,
>                                                   driver.xmlopt,
>                                                   formatflags)))
> 




More information about the libvir-list mailing list