Re: [libvirt] [PATCH v2 05/25] backup: Introduce virDomainBackup APIs

2019-12-09 Thread Ján Tomko

On Tue, Dec 03, 2019 at 06:17:27PM +0100, Peter Krempa wrote:

From: Eric Blake 

Introduce a few new public APIs related to incremental backups.  This
builds on the previous notion of a checkpoint (without an existing
checkpoint, the new API is a full backup, differing from
virDomainBlockCopy in the point of time chosen and in operation on
multiple disks at once); and also allows creation of a new checkpoint
at the same time as starting the backup (after all, an incremental
backup is only useful if it covers the state since the previous
backup).

A backup job also affects filtering a listing of domains, as well as
adding event reporting for signaling when a push model backup
completes (where the hypervisor creates the backup); note that the
pull model does not have an event (starting the backup lets a third
party access the data, and only the third party knows when it is
finished).

The full list of new APIs:
   virDomainBackupBegin;
   virDomainBackupGetXMLDesc;

Signed-off-by: Eric Blake 
Signed-off-by: Peter Krempa 
---
include/libvirt/libvirt-domain.h |  19 +++-
src/driver-hypervisor.h  |  12 +++
src/libvirt-domain-checkpoint.c  |   7 +-
src/libvirt-domain.c | 143 +++
src/libvirt_public.syms  |   6 ++
5 files changed, 183 insertions(+), 4 deletions(-)



Reviewed-by: Ján Tomko 

Jano


signature.asc
Description: PGP signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v2 05/25] backup: Introduce virDomainBackup APIs

2019-12-04 Thread Daniel P . Berrangé
On Tue, Dec 03, 2019 at 06:17:27PM +0100, Peter Krempa wrote:
> From: Eric Blake 
> 
> Introduce a few new public APIs related to incremental backups.  This
> builds on the previous notion of a checkpoint (without an existing
> checkpoint, the new API is a full backup, differing from
> virDomainBlockCopy in the point of time chosen and in operation on
> multiple disks at once); and also allows creation of a new checkpoint
> at the same time as starting the backup (after all, an incremental
> backup is only useful if it covers the state since the previous
> backup).
> 
> A backup job also affects filtering a listing of domains, as well as
> adding event reporting for signaling when a push model backup
> completes (where the hypervisor creates the backup); note that the
> pull model does not have an event (starting the backup lets a third
> party access the data, and only the third party knows when it is
> finished).
> 
> The full list of new APIs:
> virDomainBackupBegin;
> virDomainBackupGetXMLDesc;
> 
> Signed-off-by: Eric Blake 
> Signed-off-by: Peter Krempa 
> ---
>  include/libvirt/libvirt-domain.h |  19 +++-
>  src/driver-hypervisor.h  |  12 +++
>  src/libvirt-domain-checkpoint.c  |   7 +-
>  src/libvirt-domain.c | 143 +++
>  src/libvirt_public.syms  |   6 ++
>  5 files changed, 183 insertions(+), 4 deletions(-)

Reviewed-by: Daniel P. Berrangé 


Regards,
Daniel
-- 
|: https://berrange.com  -o-https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o-https://fstop138.berrange.com :|
|: https://entangle-photo.org-o-https://www.instagram.com/dberrange :|

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

[libvirt] [PATCH v2 05/25] backup: Introduce virDomainBackup APIs

2019-12-03 Thread Peter Krempa
From: Eric Blake 

Introduce a few new public APIs related to incremental backups.  This
builds on the previous notion of a checkpoint (without an existing
checkpoint, the new API is a full backup, differing from
virDomainBlockCopy in the point of time chosen and in operation on
multiple disks at once); and also allows creation of a new checkpoint
at the same time as starting the backup (after all, an incremental
backup is only useful if it covers the state since the previous
backup).

A backup job also affects filtering a listing of domains, as well as
adding event reporting for signaling when a push model backup
completes (where the hypervisor creates the backup); note that the
pull model does not have an event (starting the backup lets a third
party access the data, and only the third party knows when it is
finished).

The full list of new APIs:
virDomainBackupBegin;
virDomainBackupGetXMLDesc;

Signed-off-by: Eric Blake 
Signed-off-by: Peter Krempa 
---
 include/libvirt/libvirt-domain.h |  19 +++-
 src/driver-hypervisor.h  |  12 +++
 src/libvirt-domain-checkpoint.c  |   7 +-
 src/libvirt-domain.c | 143 +++
 src/libvirt_public.syms  |   6 ++
 5 files changed, 183 insertions(+), 4 deletions(-)

diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
index b9908fe7b0..84c5492a7b 100644
--- a/include/libvirt/libvirt-domain.h
+++ b/include/libvirt/libvirt-domain.h
@@ -4129,8 +4129,10 @@ typedef void 
(*virConnectDomainEventMigrationIterationCallback)(virConnectPtr co
  * @nparams: size of the params array
  * @opaque: application specific data
  *
- * This callback occurs when a job (such as migration) running on the domain
- * is completed. The params array will contain statistics of the just completed
+ * This callback occurs when a job (such as migration or backup) running on
+ * the domain is completed.
+ *
+ * The params array will contain statistics of the just completed
  * job as virDomainGetJobStats would return. The callback must not free @params
  * (the array will be freed once the callback finishes).
  *
@@ -4949,4 +4951,17 @@ int virDomainAgentSetResponseTimeout(virDomainPtr domain,
  int timeout,
  unsigned int flags);

+typedef enum {
+VIR_DOMAIN_BACKUP_BEGIN_REUSE_EXTERNAL = (1 << 0), /* reuse separately
+  provided images */
+} virDomainBackupBeginFlags;
+
+int virDomainBackupBegin(virDomainPtr domain,
+ const char *backupXML,
+ const char *checkpointXML,
+ unsigned int flags);
+
+char *virDomainBackupGetXMLDesc(virDomainPtr domain,
+unsigned int flags);
+
 #endif /* LIBVIRT_DOMAIN_H */
diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h
index 4afd8f6ec5..bce023017d 100644
--- a/src/driver-hypervisor.h
+++ b/src/driver-hypervisor.h
@@ -1377,6 +1377,16 @@ typedef int
int timeout,
unsigned int flags);

+typedef int
+(*virDrvDomainBackupBegin)(virDomainPtr domain,
+   const char *backupXML,
+   const char *checkpointXML,
+   unsigned int flags);
+
+typedef char *
+(*virDrvDomainBackupGetXMLDesc)(virDomainPtr domain,
+unsigned int flags);
+
 typedef struct _virHypervisorDriver virHypervisorDriver;
 typedef virHypervisorDriver *virHypervisorDriverPtr;

@@ -1638,4 +1648,6 @@ struct _virHypervisorDriver {
 virDrvDomainCheckpointDelete domainCheckpointDelete;
 virDrvDomainGetGuestInfo domainGetGuestInfo;
 virDrvDomainAgentSetResponseTimeout domainAgentSetResponseTimeout;
+virDrvDomainBackupBegin domainBackupBegin;
+virDrvDomainBackupGetXMLDesc domainBackupGetXMLDesc;
 };
diff --git a/src/libvirt-domain-checkpoint.c b/src/libvirt-domain-checkpoint.c
index fa391f8a06..432c2d5a52 100644
--- a/src/libvirt-domain-checkpoint.c
+++ b/src/libvirt-domain-checkpoint.c
@@ -102,8 +102,11 @@ virDomainCheckpointGetConnect(virDomainCheckpointPtr 
checkpoint)
  * @flags: bitwise-OR of supported virDomainCheckpointCreateFlags
  *
  * Create a new checkpoint using @xmlDesc, with a top-level
- *  element, on a running @domain.  Note that @xmlDesc
- * must validate against the  XML schema.
+ *  element, on a running @domain.  Note that
+ * @xmlDesc must validate against the  XML schema.
+ * Typically, it is more common to create a new checkpoint as part of
+ * kicking off a backup job with virDomainBackupBegin(); however, it
+ * is also possible to start a checkpoint without a backup.
  *
  * See Checkpoint XML
  * for more details on @xmlDesc. In particular, some hypervisors may require
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index b9345804ea..f873246ace 100644