mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: rename: support renaming snapshots directory
This is basically just saves snapshots metadata on disk after name is changed 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@virtuozzo.com> Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
This commit is contained in:
parent
1f209eac1d
commit
4770a96c66
@ -11102,9 +11102,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) {
|
||||
@ -11120,5 +11122,10 @@ qemuDomainNamePathsCleanup(virQEMUDriverConfigPtr cfg,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (virFileIsDir(snap_dir) &&
|
||||
virFileDeleteTree(snap_dir) < 0 &&
|
||||
!bestEffort)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -19096,6 +19096,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,
|
||||
@ -19114,6 +19138,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);
|
||||
|
||||
@ -19153,6 +19181,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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user