qemu_snapshot: move snapshot metadata reparent code

Previously the reparent happened before the actual snapshot deletion.
This change moves the code closer to the rest of the code handling
snapshot metadata when deletion happens. This makes the metadate
deletion happen after the data files are deleted.

Following patch will extract it into separate function

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
Pavel Hrdina 2022-10-11 16:43:51 +02:00
parent 9dd19a7a43
commit deb35939ee

View File

@ -2323,6 +2323,25 @@ qemuSnapshotDiscard(virQEMUDriver *driver,
}
}
if (update_parent) {
if (snap->nchildren) {
virQEMUMomentReparent rep;
rep.dir = cfg->snapshotDir;
rep.parent = snap->parent;
rep.vm = vm;
rep.err = 0;
rep.xmlopt = driver->xmlopt;
rep.writeMetadata = qemuDomainSnapshotWriteMetadata;
virDomainMomentForEachChild(snap,
qemuSnapshotChildrenReparent,
&rep);
if (rep.err < 0)
return -1;
virDomainMomentMoveChildren(snap, snap->parent);
}
}
snapFile = g_strdup_printf("%s/%s/%s.xml", cfg->snapshotDir, vm->def->name,
snap->def->name);
@ -2382,24 +2401,6 @@ qemuSnapshotDeleteSingle(virDomainObj *vm,
{
qemuDomainObjPrivate *priv = vm->privateData;
virQEMUDriver *driver = priv->driver;
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
if (snap->nchildren) {
virQEMUMomentReparent rep;
rep.dir = cfg->snapshotDir;
rep.parent = snap->parent;
rep.vm = vm;
rep.err = 0;
rep.xmlopt = driver->xmlopt;
rep.writeMetadata = qemuDomainSnapshotWriteMetadata;
virDomainMomentForEachChild(snap,
qemuSnapshotChildrenReparent,
&rep);
if (rep.err < 0)
return -1;
virDomainMomentMoveChildren(snap, snap->parent);
}
return qemuSnapshotDiscard(driver, vm, snap, true, metadata_only);
}