]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: block: store the delete flag in libvirtd's status XML
authorPavel Mores <pmores@redhat.com>
Tue, 10 Dec 2019 16:25:40 +0000 (17:25 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 11 Dec 2019 07:40:18 +0000 (08:40 +0100)
Since blockcommit is asynchronous, libvirtd can be restarted while the
operation runs.  To ensure the information necessary to finish up the job
is not lost, serialisation to and deserialisation from the status XML is
added.

To unittest this, the new element was only added to the active commit test,
the non-active commit test doesn't have the new element so as to test its
absence.

Signed-off-by: Pavel Mores <pmores@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
src/qemu/qemu_domain.c
tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml

index 767790bfc06f5407a83d863ce8dd9e58de5edc38..27926c7670eb4389ae56954903dbf6d0b1a24183 100644 (file)
@@ -2586,6 +2586,8 @@ qemuDomainObjPrivateXMLFormatBlockjobIterator(void *payload,
                 virBufferAsprintf(&childBuf, "<top node='%s'/>\n", job->data.commit.top->nodeformat);
             if (job->data.commit.topparent)
                 virBufferAsprintf(&childBuf, "<topparent node='%s'/>\n", job->data.commit.topparent->nodeformat);
+            if (job->data.commit.deleteCommittedImages)
+                virBufferAddLit(&childBuf, "<deleteCommittedImages/>\n");
             break;
 
         case QEMU_BLOCKJOB_TYPE_CREATE:
@@ -3185,6 +3187,8 @@ qemuDomainObjPrivateXMLParseBlockjobDataSpecific(qemuBlockJobDataPtr job,
                                                          "string(./base/@node)",
                                                          &job->data.commit.base,
                                                          ctxt);
+            if (virXPathNode("./deleteCommittedImages", ctxt))
+                job->data.commit.deleteCommittedImages = true;
             if (!job->data.commit.top ||
                 !job->data.commit.base)
                 goto broken;
index 67ab099bd99fd59a75b9d86359adf9acfa9f4ba5..b5d62fd4aba8b537e0c8a18ef581306f4636a016 100644 (file)
       <disk dst='vde'/>
       <base node='libvirt-19-format'/>
       <top node='libvirt-17-format'/>
+      <deleteCommittedImages/>
     </blockjob>
     <blockjob name='create-libvirt-1337-storage' type='create' state='running'>
       <create mode='storage'/>