qemu_domain: store snapshotDelete in qemuDomainJobPrivate

When daemon is restarted and libvirt tries to recover domain jobs we
need to know if the snapshot job was a snapshot delete in order to
safely abort running QEMU block jobs.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
Pavel Hrdina 2023-01-06 18:08:45 +01:00
parent 565bcb5d79
commit f474e80ac3
2 changed files with 25 additions and 0 deletions

View File

@ -197,6 +197,15 @@ qemuDomainObjPrivateXMLFormatMigrateTempBitmap(virBuffer *buf,
} }
static void
qemuDomainFormatJobPrivateSnapshot(virBuffer *buf,
qemuDomainJobPrivate *priv)
{
if (priv->snapshotDelete)
virBufferAddLit(buf, "<snapshotDelete/>\n");
}
static int static int
qemuDomainFormatJobPrivate(virBuffer *buf, qemuDomainFormatJobPrivate(virBuffer *buf,
virDomainJobObj *job, virDomainJobObj *job,
@ -214,6 +223,9 @@ qemuDomainFormatJobPrivate(virBuffer *buf,
if (priv->migParams) if (priv->migParams)
qemuMigrationParamsFormat(buf, priv->migParams); qemuMigrationParamsFormat(buf, priv->migParams);
if (job->asyncJob == VIR_ASYNC_JOB_SNAPSHOT)
qemuDomainFormatJobPrivateSnapshot(buf, priv);
return 0; return 0;
} }
@ -340,6 +352,15 @@ qemuDomainObjPrivateXMLParseMigrateTempBitmap(qemuDomainJobPrivate *jobPriv,
} }
static void
qemuDomainParseJobPrivateSnapshot(xmlXPathContextPtr ctxt,
qemuDomainJobPrivate *priv)
{
if (virXPathNode("./snapshotDelete", ctxt))
priv->snapshotDelete = true;
}
static int static int
qemuDomainParseJobPrivate(xmlXPathContextPtr ctxt, qemuDomainParseJobPrivate(xmlXPathContextPtr ctxt,
virDomainJobObj *job, virDomainJobObj *job,
@ -356,6 +377,8 @@ qemuDomainParseJobPrivate(xmlXPathContextPtr ctxt,
if (qemuMigrationParamsParse(ctxt, &priv->migParams) < 0) if (qemuMigrationParamsParse(ctxt, &priv->migParams) < 0)
return -1; return -1;
qemuDomainParseJobPrivateSnapshot(ctxt, priv);
return 0; return 0;
} }

View File

@ -550,6 +550,8 @@ struct _qemuDomainJobPrivate {
* should wait for it to finish */ * should wait for it to finish */
bool spiceMigrated; /* spice migration completed */ bool spiceMigrated; /* spice migration completed */
bool dumpCompleted; /* dump completed */ bool dumpCompleted; /* dump completed */
bool snapshotDelete; /* indicate that snapshot job is
* deleting snapshot */
qemuMigrationParams *migParams; qemuMigrationParams *migParams;
GSList *migTempBitmaps; /* temporary block dirty bitmaps - qemuDomainJobPrivateMigrateTempBitmap */ GSList *migTempBitmaps; /* temporary block dirty bitmaps - qemuDomainJobPrivateMigrateTempBitmap */
}; };