]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu_domain: store snapshotDelete in qemuDomainJobPrivate
authorPavel Hrdina <phrdina@redhat.com>
Fri, 6 Jan 2023 17:08:45 +0000 (18:08 +0100)
committerPavel Hrdina <phrdina@redhat.com>
Mon, 9 Jan 2023 12:33:12 +0000 (13:33 +0100)
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>
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h

index 73dc13e178a3b62bfb8608d9c7d3c83804d6d710..7be431dd19289e56ed4748be5a1b10bc0307b077 100644 (file)
@@ -197,6 +197,15 @@ qemuDomainObjPrivateXMLFormatMigrateTempBitmap(virBuffer *buf,
 }
 
 
+static void
+qemuDomainFormatJobPrivateSnapshot(virBuffer *buf,
+                                   qemuDomainJobPrivate *priv)
+{
+    if (priv->snapshotDelete)
+        virBufferAddLit(buf, "<snapshotDelete/>\n");
+}
+
+
 static int
 qemuDomainFormatJobPrivate(virBuffer *buf,
                            virDomainJobObj *job,
@@ -214,6 +223,9 @@ qemuDomainFormatJobPrivate(virBuffer *buf,
     if (priv->migParams)
         qemuMigrationParamsFormat(buf, priv->migParams);
 
+    if (job->asyncJob == VIR_ASYNC_JOB_SNAPSHOT)
+        qemuDomainFormatJobPrivateSnapshot(buf, priv);
+
     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
 qemuDomainParseJobPrivate(xmlXPathContextPtr ctxt,
                           virDomainJobObj *job,
@@ -356,6 +377,8 @@ qemuDomainParseJobPrivate(xmlXPathContextPtr ctxt,
     if (qemuMigrationParamsParse(ctxt, &priv->migParams) < 0)
         return -1;
 
+    qemuDomainParseJobPrivateSnapshot(ctxt, priv);
+
     return 0;
 }
 
index e34d52c0332d91748a48b81d1d440ff4146b11cb..4b0593d5db7041330eea0f7188bf051c97b19c53 100644 (file)
@@ -550,6 +550,8 @@ struct _qemuDomainJobPrivate {
                                          * should wait for it to finish */
     bool spiceMigrated;                 /* spice migration completed */
     bool dumpCompleted;                 /* dump completed */
+    bool snapshotDelete;                /* indicate that snapshot job is
+                                         * deleting snapshot */
     qemuMigrationParams *migParams;
     GSList *migTempBitmaps;  /* temporary block dirty bitmaps - qemuDomainJobPrivateMigrateTempBitmap */
 };