[PATCH v2 05/10] qemu: rename: support renaming snapshots directory
Daniel Henrique Barboza
danielhb413 at gmail.com
Mon Nov 9 13:42:15 UTC 2020
On 11/3/20 9:00 AM, Nikolay Shirokovskiy wrote:
> This is basically just saves snapshots metadata on disk after name is changed
Extra 'is'. "This basically just saves ...."
> in memory as path to domain snapshot directory depends on name. After that
> old snapshot directory is deleted with snapshot metadata files.
>
> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
> ---
> src/qemu/qemu_domain.c | 7 +++++++
> src/qemu/qemu_driver.c | 33 +++++++++++++++++++++++++++++++++
> 2 files changed, 40 insertions(+)
>
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 7b2c165..258c8c5 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -11103,9 +11103,11 @@ qemuDomainNamePathsCleanup(virQEMUDriverConfigPtr cfg,
> {
> g_autofree char *cfg_file = NULL;
> g_autofree char *autostart_link = NULL;
> + g_autofree char *snap_dir = NULL;
>
> cfg_file = virDomainConfigFile(cfg->configDir, name);
> autostart_link = virDomainConfigFile(cfg->autostartDir, name);
> + snap_dir = g_strdup_printf("%s/%s", cfg->snapshotDir, name);
>
> if (virFileExists(cfg_file) &&
> unlink(cfg_file) < 0) {
> @@ -11121,5 +11123,10 @@ qemuDomainNamePathsCleanup(virQEMUDriverConfigPtr cfg,
> return -1;
> }
>
> + if (virFileIsDir(snap_dir) &&
> + virFileDeleteTree(snap_dir) < 0 &&
> + !bestEffort)
> + return -1;
> +
> return 0;
> }
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 52c42cf..2664603 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -19101,6 +19101,30 @@ qemuDomainSetUserPassword(virDomainPtr dom,
> }
>
>
> +struct qemuDomainMomentWriteMetadataData {
> + virQEMUDriverPtr driver;
> + virDomainObjPtr vm;
> +};
> +
> +
> +static int
> +qemuDomainSnapshotWriteMetadataIter(void *payload,
> + const char *name G_GNUC_UNUSED,
> + void *opaque)
> +{
> + struct qemuDomainMomentWriteMetadataData *data = opaque;
> + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(data->driver);
> + int ret;
> +
> + ret = qemuDomainSnapshotWriteMetadata(data->vm, payload,
> + data->driver->xmlopt,
> + cfg->snapshotDir);
> +
> + virObjectUnref(cfg);
> + return ret;
> +}
> +
> +
> static int
> qemuDomainRenameCallback(virDomainObjPtr vm,
> const char *new_name,
> @@ -19119,6 +19143,10 @@ qemuDomainRenameCallback(virDomainObjPtr vm,
> g_autofree char *old_dom_cfg_file = NULL;
> g_autofree char *new_dom_autostart_link = NULL;
> g_autofree char *old_dom_autostart_link = NULL;
> + struct qemuDomainMomentWriteMetadataData data = {
> + .driver = driver,
> + .vm = vm,
> + };
>
> virCheckFlags(0, ret);
>
> @@ -19158,6 +19186,11 @@ qemuDomainRenameCallback(virDomainObjPtr vm,
> vm->def->name = new_dom_name;
> new_dom_name = NULL;
>
> + if (virDomainSnapshotForEach(vm->snapshots,
> + qemuDomainSnapshotWriteMetadataIter,
> + &data) < 0)
> + goto cleanup;
> +
> if (virDomainDefSave(vm->def, driver->xmlopt, cfg->configDir) < 0)
> goto cleanup;
>
>
More information about the libvir-list
mailing list