mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
qemu: blockjob: Store list of bitmaps disabled prior to commit
Starting a commit job will require disabling bitmaps in the base image so that they are not dirtied by the commit job. We need to store a list of the bitmaps so that we can later re-enable them. Add a field and status XML handling code as well as a test. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
38d0dd08d6
commit
41de7230ab
@ -88,6 +88,8 @@ struct _qemuBlockJobCommitData {
|
||||
virStorageSourcePtr top;
|
||||
virStorageSourcePtr base;
|
||||
bool deleteCommittedImages;
|
||||
char **disabledBitmapsBase; /* a NULL-terminated list of bitmap names which
|
||||
were disabled in @base for the commit job */
|
||||
};
|
||||
|
||||
|
||||
|
@ -2611,6 +2611,9 @@ static void
|
||||
qemuDomainPrivateBlockJobFormatCommit(qemuBlockJobDataPtr job,
|
||||
virBufferPtr buf)
|
||||
{
|
||||
g_auto(virBuffer) disabledBitmapsBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
char **bitmaps = job->data.commit.disabledBitmapsBase;
|
||||
|
||||
if (job->data.commit.base)
|
||||
virBufferAsprintf(buf, "<base node='%s'/>\n", job->data.commit.base->nodeformat);
|
||||
|
||||
@ -2622,6 +2625,11 @@ qemuDomainPrivateBlockJobFormatCommit(qemuBlockJobDataPtr job,
|
||||
|
||||
if (job->data.commit.deleteCommittedImages)
|
||||
virBufferAddLit(buf, "<deleteCommittedImages/>\n");
|
||||
|
||||
while (bitmaps && *bitmaps)
|
||||
virBufferEscapeString(&disabledBitmapsBuf, "<bitmap name='%s'/>\n", *(bitmaps++));
|
||||
|
||||
virXMLFormatElement(buf, "disabledBaseBitmaps", NULL, &disabledBitmapsBuf);
|
||||
}
|
||||
|
||||
|
||||
@ -3234,6 +3242,9 @@ static int
|
||||
qemuDomainObjPrivateXMLParseBlockjobDataCommit(qemuBlockJobDataPtr job,
|
||||
xmlXPathContextPtr ctxt)
|
||||
{
|
||||
g_autofree xmlNodePtr *nodes = NULL;
|
||||
ssize_t nnodes;
|
||||
|
||||
if (job->type == QEMU_BLOCKJOB_TYPE_COMMIT) {
|
||||
qemuDomainObjPrivateXMLParseBlockjobNodename(job,
|
||||
"string(./topparent/@node)",
|
||||
@ -3260,6 +3271,21 @@ qemuDomainObjPrivateXMLParseBlockjobDataCommit(qemuBlockJobDataPtr job,
|
||||
!job->data.commit.base)
|
||||
return -1;
|
||||
|
||||
if ((nnodes = virXPathNodeSet("./disabledBaseBitmaps/bitmap", ctxt, &nodes)) > 0) {
|
||||
size_t i;
|
||||
|
||||
job->data.commit.disabledBitmapsBase = g_new0(char *, nnodes + 1);
|
||||
|
||||
for (i = 0; i < nnodes; i++) {
|
||||
char *tmp;
|
||||
|
||||
if (!(tmp = virXMLPropString(nodes[i], "name")))
|
||||
return -1;
|
||||
|
||||
job->data.commit.disabledBitmapsBase[i] = g_steal_pointer(&tmp);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -243,6 +243,10 @@
|
||||
<base node='libvirt-19-format'/>
|
||||
<top node='libvirt-17-format'/>
|
||||
<deleteCommittedImages/>
|
||||
<disabledBaseBitmaps>
|
||||
<bitmap name='test'/>
|
||||
<bitmap name='test1'/>
|
||||
</disabledBaseBitmaps>
|
||||
</blockjob>
|
||||
<blockjob name='create-libvirt-1337-storage' type='create' state='running'>
|
||||
<create mode='storage'/>
|
||||
|
Loading…
Reference in New Issue
Block a user