[libvirt] [PATCH v2 4/9] backup: Introduce virDomainCheckpointPtr

Eric Blake eblake at redhat.com
Fri Oct 12 20:36:34 UTC 2018


On 10/12/18 3:59 AM, Peter Krempa wrote:
> On Fri, Oct 12, 2018 at 00:10:06 -0500, Eric Blake wrote:
>> Prepare for introducing a bunch of new public APIs related to
>> backup checkpoints by first introducing a new internal type
>> and errors associated with that type.  Checkpoints are modeled
>> heavily after virDomainSnapshotPtr (both represent a point in
>> time of the guest), although a snapshot exists with the intent
>> of rolling back to that state, while a checkpoint exists to
>> make it possible to create an incremental backup at a later
>> time.
>>
>> Signed-off-by: Eric Blake <eblake at redhat.com>
>>

> 
> All the error stuff should be in a separate commit. You don't even
> mention it in the commit message.

Will split.

> 
>>   }
>> diff --git a/include/libvirt/libvirt.h b/include/libvirt/libvirt.h
>> index 36f6d60775..26887a40e7 100644
>> --- a/include/libvirt/libvirt.h
>> +++ b/include/libvirt/libvirt.h
>> @@ -36,6 +36,8 @@ extern "C" {
>>   # include <libvirt/libvirt-common.h>
>>   # include <libvirt/libvirt-host.h>
>>   # include <libvirt/libvirt-domain.h>
>> +typedef struct _virDomainCheckpoint virDomainCheckpoint;
>> +typedef virDomainCheckpoint *virDomainCheckpointPtr;
> 
> Ewwww. Don't mix includes with definitions.

Goes away in 6/9 when I create the public 
<libvirt/libvirt-domain-checkpoint.h>. I should clearly document this in 
the commit message and with a comment, if I can't find a way to reorder 
the patches so that the hack isn't even needed.

> 
> 
>>   # include <libvirt/libvirt-domain-snapshot.h>
>>   # include <libvirt/libvirt-event.h>
>>   # include <libvirt/libvirt-interface.h>
>> diff --git a/src/datatypes.h b/src/datatypes.h
>> index e1b38706dc..c27ac98437 100644
>> --- a/src/datatypes.h
>> +++ b/src/datatypes.h
> 
> [...]
> 
>> @@ -667,6 +683,17 @@ struct _virStream {
>>       void *privateData;
>>   };
>>
>> +/**
>> + * _virDomainCheckpoint
>> + *
>> + * Internal structure associated with a domain checkpoint
>> + */
>> +struct _virDomainCheckpoint {
>> +    virObject parent;
>> +    char *name;
> 
> I was thinking whether an UUID should not be used as well. But on the
> other hand most management tools will stash an UUID into the name
> anyways so it should be fine.

And, it matches that snapshots also use a name.

In fact, I'm half-heartedly thinking of refactoring into:

struct _virDomainAffiliate {
     virObject parent;
     char *name;
};

struct _virDomainSnapshot {
     _virDomainAffiliate base;
};

struct _virDomainCheckpoint {
     _virDomainAffliate base;
};

because there were several places where I could reuse more code between 
snapshots and checkpoints if they had a common base type.


>> +++ b/src/datatypes.c
>> @@ -1,7 +1,7 @@
>>   /*
>>    * datatypes.c: management of structs for public data types
>>    *
>> - * Copyright (C) 2006-2015 Red Hat, Inc.
>> + * Copyright (C) 2006-2018 Red Hat, Inc.
> 
> AFAIK we established that bumping these is pointless churn. The dates
> can be re-establised from git history.

My emacs has a hook that does it automatically. I can turn the hook off 
for libvirt, if you don't like the churn.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org




More information about the libvir-list mailing list