mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-18 10:35:20 +00:00
backup: Introduce virDomainCheckpointPtr
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@redhat.com> Reviewed-by: John Ferlan <jferlan@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
1c6b6c0ba1
commit
421861824c
@ -4,7 +4,7 @@
|
|||||||
* Description: Provides the interfaces of the libvirt library to handle
|
* Description: Provides the interfaces of the libvirt library to handle
|
||||||
* virtualized domains
|
* virtualized domains
|
||||||
*
|
*
|
||||||
* Copyright (C) 2005-2006, 2010-2014 Red Hat, Inc.
|
* Copyright (C) 2005-2019 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -34,6 +34,10 @@ extern "C" {
|
|||||||
# include <libvirt/libvirt-common.h>
|
# include <libvirt/libvirt-common.h>
|
||||||
# include <libvirt/libvirt-host.h>
|
# include <libvirt/libvirt-host.h>
|
||||||
# include <libvirt/libvirt-domain.h>
|
# include <libvirt/libvirt-domain.h>
|
||||||
|
/* FIXME: Temporary hack until later patch creates new
|
||||||
|
* libvirt-domain-checkpoint.h file */
|
||||||
|
typedef struct _virDomainCheckpoint virDomainCheckpoint;
|
||||||
|
typedef virDomainCheckpoint *virDomainCheckpointPtr;
|
||||||
# include <libvirt/libvirt-domain-snapshot.h>
|
# include <libvirt/libvirt-domain-snapshot.h>
|
||||||
# include <libvirt/libvirt-event.h>
|
# include <libvirt/libvirt-event.h>
|
||||||
# include <libvirt/libvirt-interface.h>
|
# include <libvirt/libvirt-interface.h>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* Description: Provides the interfaces of the libvirt library to handle
|
* Description: Provides the interfaces of the libvirt library to handle
|
||||||
* errors raised while using the library.
|
* errors raised while using the library.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006-2016 Red Hat, Inc.
|
* Copyright (C) 2006-2019 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -132,6 +132,7 @@ typedef enum {
|
|||||||
VIR_FROM_LIBSSH = 66, /* Error from libssh connection transport */
|
VIR_FROM_LIBSSH = 66, /* Error from libssh connection transport */
|
||||||
VIR_FROM_RESCTRL = 67, /* Error from resource control */
|
VIR_FROM_RESCTRL = 67, /* Error from resource control */
|
||||||
VIR_FROM_FIREWALLD = 68, /* Error from firewalld */
|
VIR_FROM_FIREWALLD = 68, /* Error from firewalld */
|
||||||
|
VIR_FROM_DOMAIN_CHECKPOINT = 69, /* Error from domain checkpoint */
|
||||||
|
|
||||||
# ifdef VIR_ENUM_SENTINELS
|
# ifdef VIR_ENUM_SENTINELS
|
||||||
VIR_ERR_DOMAIN_LAST
|
VIR_ERR_DOMAIN_LAST
|
||||||
@ -322,11 +323,13 @@ typedef enum {
|
|||||||
VIR_ERR_DEVICE_MISSING = 99, /* fail to find the desired device */
|
VIR_ERR_DEVICE_MISSING = 99, /* fail to find the desired device */
|
||||||
VIR_ERR_INVALID_NWFILTER_BINDING = 100, /* invalid nwfilter binding */
|
VIR_ERR_INVALID_NWFILTER_BINDING = 100, /* invalid nwfilter binding */
|
||||||
VIR_ERR_NO_NWFILTER_BINDING = 101, /* no nwfilter binding */
|
VIR_ERR_NO_NWFILTER_BINDING = 101, /* no nwfilter binding */
|
||||||
|
VIR_ERR_INVALID_DOMAIN_CHECKPOINT = 102, /* invalid domain checkpoint */
|
||||||
|
VIR_ERR_NO_DOMAIN_CHECKPOINT = 103, /* domain checkpoint not found */
|
||||||
|
VIR_ERR_NO_DOMAIN_BACKUP = 104, /* domain backup job id not found */
|
||||||
|
|
||||||
# ifdef VIR_ENUM_SENTINELS
|
# ifdef VIR_ENUM_SENTINELS
|
||||||
VIR_ERR_NUMBER_LAST
|
VIR_ERR_NUMBER_LAST
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
} virErrorNumber;
|
} virErrorNumber;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* datatypes.c: management of structs for public data types
|
* datatypes.c: management of structs for public data types
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006-2015 Red Hat, Inc.
|
* Copyright (C) 2006-2019 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -36,6 +36,7 @@ VIR_LOG_INIT("datatypes");
|
|||||||
virClassPtr virConnectClass;
|
virClassPtr virConnectClass;
|
||||||
virClassPtr virConnectCloseCallbackDataClass;
|
virClassPtr virConnectCloseCallbackDataClass;
|
||||||
virClassPtr virDomainClass;
|
virClassPtr virDomainClass;
|
||||||
|
virClassPtr virDomainCheckpointClass;
|
||||||
virClassPtr virDomainSnapshotClass;
|
virClassPtr virDomainSnapshotClass;
|
||||||
virClassPtr virInterfaceClass;
|
virClassPtr virInterfaceClass;
|
||||||
virClassPtr virNetworkClass;
|
virClassPtr virNetworkClass;
|
||||||
@ -50,6 +51,7 @@ virClassPtr virStoragePoolClass;
|
|||||||
static void virConnectDispose(void *obj);
|
static void virConnectDispose(void *obj);
|
||||||
static void virConnectCloseCallbackDataDispose(void *obj);
|
static void virConnectCloseCallbackDataDispose(void *obj);
|
||||||
static void virDomainDispose(void *obj);
|
static void virDomainDispose(void *obj);
|
||||||
|
static void virDomainCheckpointDispose(void *obj);
|
||||||
static void virDomainSnapshotDispose(void *obj);
|
static void virDomainSnapshotDispose(void *obj);
|
||||||
static void virInterfaceDispose(void *obj);
|
static void virInterfaceDispose(void *obj);
|
||||||
static void virNetworkDispose(void *obj);
|
static void virNetworkDispose(void *obj);
|
||||||
@ -86,6 +88,7 @@ virDataTypesOnceInit(void)
|
|||||||
DECLARE_CLASS_LOCKABLE(virConnect);
|
DECLARE_CLASS_LOCKABLE(virConnect);
|
||||||
DECLARE_CLASS_LOCKABLE(virConnectCloseCallbackData);
|
DECLARE_CLASS_LOCKABLE(virConnectCloseCallbackData);
|
||||||
DECLARE_CLASS(virDomain);
|
DECLARE_CLASS(virDomain);
|
||||||
|
DECLARE_CLASS(virDomainCheckpoint);
|
||||||
DECLARE_CLASS(virDomainSnapshot);
|
DECLARE_CLASS(virDomainSnapshot);
|
||||||
DECLARE_CLASS(virInterface);
|
DECLARE_CLASS(virInterface);
|
||||||
DECLARE_CLASS(virNetwork);
|
DECLARE_CLASS(virNetwork);
|
||||||
@ -900,6 +903,64 @@ virNWFilterBindingDispose(void *obj)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virGetDomainCheckpoint:
|
||||||
|
* @domain: the domain to checkpoint
|
||||||
|
* @name: pointer to the domain checkpoint name
|
||||||
|
*
|
||||||
|
* Allocates a new domain checkpoint object. When the object is no longer needed,
|
||||||
|
* virObjectUnref() must be called in order to not leak data.
|
||||||
|
*
|
||||||
|
* Returns a pointer to the domain checkpoint object, or NULL on error.
|
||||||
|
*/
|
||||||
|
virDomainCheckpointPtr
|
||||||
|
virGetDomainCheckpoint(virDomainPtr domain,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
virDomainCheckpointPtr ret = NULL;
|
||||||
|
|
||||||
|
if (virDataTypesInitialize() < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
virCheckDomainGoto(domain, error);
|
||||||
|
virCheckNonNullArgGoto(name, error);
|
||||||
|
|
||||||
|
if (!(ret = virObjectNew(virDomainCheckpointClass)))
|
||||||
|
goto error;
|
||||||
|
if (VIR_STRDUP(ret->name, name) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
ret->domain = virObjectRef(domain);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
error:
|
||||||
|
virObjectUnref(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virDomainCheckpointDispose:
|
||||||
|
* @obj: the domain checkpoint to release
|
||||||
|
*
|
||||||
|
* Unconditionally release all memory associated with a checkpoint.
|
||||||
|
* The checkpoint object must not be used once this method returns.
|
||||||
|
*
|
||||||
|
* It will also unreference the associated connection object,
|
||||||
|
* which may also be released if its ref count hits zero.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
virDomainCheckpointDispose(void *obj)
|
||||||
|
{
|
||||||
|
virDomainCheckpointPtr checkpoint = obj;
|
||||||
|
VIR_DEBUG("release checkpoint %p %s", checkpoint, checkpoint->name);
|
||||||
|
|
||||||
|
VIR_FREE(checkpoint->name);
|
||||||
|
virObjectUnref(checkpoint->domain);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virGetDomainSnapshot:
|
* virGetDomainSnapshot:
|
||||||
* @domain: the domain to snapshot
|
* @domain: the domain to snapshot
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* datatypes.h: management of structs for public data types
|
* datatypes.h: management of structs for public data types
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006-2015 Red Hat, Inc.
|
* Copyright (C) 2006-2019 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
extern virClassPtr virConnectClass;
|
extern virClassPtr virConnectClass;
|
||||||
extern virClassPtr virDomainClass;
|
extern virClassPtr virDomainClass;
|
||||||
|
extern virClassPtr virDomainCheckpointClass;
|
||||||
extern virClassPtr virDomainSnapshotClass;
|
extern virClassPtr virDomainSnapshotClass;
|
||||||
extern virClassPtr virInterfaceClass;
|
extern virClassPtr virInterfaceClass;
|
||||||
extern virClassPtr virNetworkClass;
|
extern virClassPtr virNetworkClass;
|
||||||
@ -292,6 +293,21 @@ extern virClassPtr virAdmClientClass;
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
# define virCheckDomainCheckpointReturn(obj, retval) \
|
||||||
|
do { \
|
||||||
|
virDomainCheckpointPtr _check = (obj); \
|
||||||
|
if (!virObjectIsClass(_check, virDomainCheckpointClass) || \
|
||||||
|
!virObjectIsClass(_check->domain, virDomainClass) || \
|
||||||
|
!virObjectIsClass(_check->domain->conn, virConnectClass)) { \
|
||||||
|
virReportErrorHelper(VIR_FROM_DOMAIN_CHECKPOINT, \
|
||||||
|
VIR_ERR_INVALID_DOMAIN_CHECKPOINT, \
|
||||||
|
__FILE__, __FUNCTION__, __LINE__, \
|
||||||
|
__FUNCTION__); \
|
||||||
|
virDispatchError(NULL); \
|
||||||
|
return retval; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
# define virCheckDomainSnapshotReturn(obj, retval) \
|
# define virCheckDomainSnapshotReturn(obj, retval) \
|
||||||
do { \
|
do { \
|
||||||
virDomainSnapshotPtr _snap = (obj); \
|
virDomainSnapshotPtr _snap = (obj); \
|
||||||
@ -668,6 +684,19 @@ struct _virStream {
|
|||||||
virFreeCallback ff;
|
virFreeCallback ff;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _virDomainCheckpoint
|
||||||
|
*
|
||||||
|
* Internal structure associated with a domain checkpoint
|
||||||
|
*/
|
||||||
|
struct _virDomainCheckpoint {
|
||||||
|
virObject parent;
|
||||||
|
char *name;
|
||||||
|
virDomainPtr domain;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _virDomainSnapshot
|
* _virDomainSnapshot
|
||||||
*
|
*
|
||||||
@ -744,6 +773,8 @@ virNWFilterPtr virGetNWFilter(virConnectPtr conn,
|
|||||||
virNWFilterBindingPtr virGetNWFilterBinding(virConnectPtr conn,
|
virNWFilterBindingPtr virGetNWFilterBinding(virConnectPtr conn,
|
||||||
const char *portdev,
|
const char *portdev,
|
||||||
const char *filtername);
|
const char *filtername);
|
||||||
|
virDomainCheckpointPtr virGetDomainCheckpoint(virDomainPtr domain,
|
||||||
|
const char *name);
|
||||||
virDomainSnapshotPtr virGetDomainSnapshot(virDomainPtr domain,
|
virDomainSnapshotPtr virGetDomainSnapshot(virDomainPtr domain,
|
||||||
const char *name);
|
const char *name);
|
||||||
|
|
||||||
|
@ -1252,10 +1252,12 @@ virConnectCloseCallbackDataClass;
|
|||||||
virConnectCloseCallbackDataGetCallback;
|
virConnectCloseCallbackDataGetCallback;
|
||||||
virConnectCloseCallbackDataRegister;
|
virConnectCloseCallbackDataRegister;
|
||||||
virConnectCloseCallbackDataUnregister;
|
virConnectCloseCallbackDataUnregister;
|
||||||
|
virDomainCheckpointClass;
|
||||||
virDomainClass;
|
virDomainClass;
|
||||||
virDomainSnapshotClass;
|
virDomainSnapshotClass;
|
||||||
virGetConnect;
|
virGetConnect;
|
||||||
virGetDomain;
|
virGetDomain;
|
||||||
|
virGetDomainCheckpoint;
|
||||||
virGetDomainSnapshot;
|
virGetDomainSnapshot;
|
||||||
virGetInterface;
|
virGetInterface;
|
||||||
virGetNetwork;
|
virGetNetwork;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* virerror.c: error handling and reporting code for libvirt
|
* virerror.c: error handling and reporting code for libvirt
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006, 2008-2016 Red Hat, Inc.
|
* Copyright (C) 2006-2019 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -139,6 +139,7 @@ VIR_ENUM_IMPL(virErrorDomain, VIR_ERR_DOMAIN_LAST,
|
|||||||
"Libssh transport layer",
|
"Libssh transport layer",
|
||||||
"Resource control",
|
"Resource control",
|
||||||
"FirewallD",
|
"FirewallD",
|
||||||
|
"Domain Checkpoint",
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -1214,6 +1215,15 @@ const virErrorMsgTuple virErrorMsgStrings[VIR_ERR_NUMBER_LAST] = {
|
|||||||
[VIR_ERR_NO_NWFILTER_BINDING] = {
|
[VIR_ERR_NO_NWFILTER_BINDING] = {
|
||||||
N_("Network filter binding not found"),
|
N_("Network filter binding not found"),
|
||||||
N_("Network filter binding not found: %s") },
|
N_("Network filter binding not found: %s") },
|
||||||
|
[VIR_ERR_INVALID_DOMAIN_CHECKPOINT] = {
|
||||||
|
N_("Invalid domain checkpoint"),
|
||||||
|
N_("Invalid domain checkpoint: %s") },
|
||||||
|
[VIR_ERR_NO_DOMAIN_CHECKPOINT] = {
|
||||||
|
N_("Domain checkpoint not found"),
|
||||||
|
N_("Domain checkpoint not found: %s") },
|
||||||
|
[VIR_ERR_NO_DOMAIN_BACKUP] = {
|
||||||
|
N_("Domain backup job id not found"),
|
||||||
|
N_("Domain backup job id not found: %s") },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user