[PATCH v2 06/10] qemu: rename: support renaming checkpoints directory
Daniel Henrique Barboza
danielhb413 at gmail.com
Mon Nov 9 13:44:22 UTC 2020
On 11/3/20 9:00 AM, Nikolay Shirokovskiy wrote:
> This is basically just saves checkpoints metadata on disk after name is changed
"This basically just saves ..."
> in memory as path to domain checkpoints directory depends on name. After that
> old checkpoint directory is deleted with checkpoint metadata files.
>
> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
> ---
> src/qemu/qemu_checkpoint.c | 2 +-
> src/qemu/qemu_checkpoint.h | 6 ++++++
> src/qemu/qemu_domain.c | 7 +++++++
> src/qemu/qemu_driver.c | 23 +++++++++++++++++++++++
> 4 files changed, 37 insertions(+), 1 deletion(-)
>
> diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
> index fb76c21..4a496d5 100644
> --- a/src/qemu/qemu_checkpoint.c
> +++ b/src/qemu/qemu_checkpoint.c
> @@ -76,7 +76,7 @@ qemuCheckpointObjFromCheckpoint(virDomainObjPtr vm,
> }
>
>
> -static int
> +int
> qemuCheckpointWriteMetadata(virDomainObjPtr vm,
> virDomainMomentObjPtr checkpoint,
> virDomainXMLOptionPtr xmlopt,
> diff --git a/src/qemu/qemu_checkpoint.h b/src/qemu/qemu_checkpoint.h
> index 0d267a1..d58657e 100644
> --- a/src/qemu/qemu_checkpoint.h
> +++ b/src/qemu/qemu_checkpoint.h
> @@ -79,3 +79,9 @@ qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
> virJSONValuePtr actions,
> const char *diskdst,
> GSList **reopenimages);
> +
> +int
> +qemuCheckpointWriteMetadata(virDomainObjPtr vm,
> + virDomainMomentObjPtr checkpoint,
> + virDomainXMLOptionPtr xmlopt,
> + const char *checkpointDir);
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 258c8c5..422b534 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -11104,10 +11104,12 @@ qemuDomainNamePathsCleanup(virQEMUDriverConfigPtr cfg,
> g_autofree char *cfg_file = NULL;
> g_autofree char *autostart_link = NULL;
> g_autofree char *snap_dir = NULL;
> + g_autofree char *chk_dir = NULL;
>
> cfg_file = virDomainConfigFile(cfg->configDir, name);
> autostart_link = virDomainConfigFile(cfg->autostartDir, name);
> snap_dir = g_strdup_printf("%s/%s", cfg->snapshotDir, name);
> + chk_dir = g_strdup_printf("%s/%s", cfg->checkpointDir, name);
>
> if (virFileExists(cfg_file) &&
> unlink(cfg_file) < 0) {
> @@ -11128,5 +11130,10 @@ qemuDomainNamePathsCleanup(virQEMUDriverConfigPtr cfg,
> !bestEffort)
> return -1;
>
> + if (virFileIsDir(chk_dir) &&
> + virFileDeleteTree(chk_dir) < 0 &&
> + !bestEffort)
> + return -1;
> +
> return 0;
> }
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 2664603..4e0186b 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -19126,6 +19126,24 @@ qemuDomainSnapshotWriteMetadataIter(void *payload,
>
>
> static int
> +qemuDomainCheckpointWriteMetadataIter(void *payload,
> + const char *name G_GNUC_UNUSED,
> + void *opaque)
> +{
> + struct qemuDomainMomentWriteMetadataData *data = opaque;
> + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(data->driver);
> + int ret;
> +
> + ret = qemuCheckpointWriteMetadata(data->vm, payload,
> + data->driver->xmlopt,
> + cfg->snapshotDir);
> +
> + virObjectUnref(cfg);
> + return ret;
> +}
> +
> +
> +static int
> qemuDomainRenameCallback(virDomainObjPtr vm,
> const char *new_name,
> unsigned int flags,
> @@ -19191,6 +19209,11 @@ qemuDomainRenameCallback(virDomainObjPtr vm,
> &data) < 0)
> goto cleanup;
>
> + if (virDomainCheckpointForEach(vm->checkpoints,
> + qemuDomainCheckpointWriteMetadataIter,
> + &data) < 0)
> + goto cleanup;
> +
> if (virDomainDefSave(vm->def, driver->xmlopt, cfg->configDir) < 0)
> goto cleanup;
>
>
More information about the libvir-list
mailing list