backup: Parse and output checkpoint XML
Add a new file checkpoint_conf.c that performs the translation to and
from new XML describing a checkpoint. The code shares a common base
class with snapshots, since a checkpoint similarly represents the
domain state at a moment in time. Add some basic testing of round trip
XML handling through the new code.
Of note - this code intentionally differs from snapshots in that XML
schema validation is unconditional, rather than based on a public API
flag. We have many existing interfaces that still need to add a flag
for opt-in schema validation, but those interfaces have existing
clients that may not have been producing strictly-compliant XML, or we
may still uncover bugs where our RNG grammar is inconsistent with our
code (where omitting the opt-in flag allows existing apps to keep
working while waiting for an RNG patch). But since checkpoints are
brand-new, it's easier to ensure the code matches the schema by always
using the schema. If needed, a later patch could extend the API and
add a flag to turn on to request schema validation, rather than having
it forced (possibly just the validation of the <domain> sub-element
during REDEFINE) - but if a user encounters XML that looks like it
should be good but fails to validate with our RNG schema, they would
either have to upgrade to a new libvirt that adds the new flag, or
upgrade to a new libvirt that fixes the RNG schema, which implies
adding such a flag won't help much.
Also, the redefine flag requires the <domain> sub-element to be
present, rather than catering to historical back-compat to older
versions.
Signed-off-by: Eric Blake <eblake@redhat.com>
2018-07-08 05:01:14 +03:00
<domaincheckpoint >
<name > 1525889631</name>
<description > Completion of updates after OS install</description>
<parent >
<name > 1525111885</name>
</parent>
<creationTime > 1525889631</creationTime>
<disks >
<disk name= 'vda' checkpoint= 'bitmap' bitmap= '1525889631' />
<disk name= 'vdb' checkpoint= 'no' />
</disks>
<domain type= 'qemu' >
<name > QEMUGuest1</name>
<uuid > c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
<memory unit= 'KiB' > 219136</memory>
<currentMemory unit= 'KiB' > 219136</currentMemory>
<vcpu placement= 'static' > 1</vcpu>
<os >
2023-07-03 14:40:38 +03:00
<type arch= 'x86_64' machine= 'pc' > hvm</type>
backup: Parse and output checkpoint XML
Add a new file checkpoint_conf.c that performs the translation to and
from new XML describing a checkpoint. The code shares a common base
class with snapshots, since a checkpoint similarly represents the
domain state at a moment in time. Add some basic testing of round trip
XML handling through the new code.
Of note - this code intentionally differs from snapshots in that XML
schema validation is unconditional, rather than based on a public API
flag. We have many existing interfaces that still need to add a flag
for opt-in schema validation, but those interfaces have existing
clients that may not have been producing strictly-compliant XML, or we
may still uncover bugs where our RNG grammar is inconsistent with our
code (where omitting the opt-in flag allows existing apps to keep
working while waiting for an RNG patch). But since checkpoints are
brand-new, it's easier to ensure the code matches the schema by always
using the schema. If needed, a later patch could extend the API and
add a flag to turn on to request schema validation, rather than having
it forced (possibly just the validation of the <domain> sub-element
during REDEFINE) - but if a user encounters XML that looks like it
should be good but fails to validate with our RNG schema, they would
either have to upgrade to a new libvirt that adds the new flag, or
upgrade to a new libvirt that fixes the RNG schema, which implies
adding such a flag won't help much.
Also, the redefine flag requires the <domain> sub-element to be
present, rather than catering to historical back-compat to older
versions.
Signed-off-by: Eric Blake <eblake@redhat.com>
2018-07-08 05:01:14 +03:00
<boot dev= 'hd' />
</os>
<clock offset= 'utc' />
<on_poweroff > destroy</on_poweroff>
<on_reboot > restart</on_reboot>
<on_crash > destroy</on_crash>
<devices >
2023-07-03 14:40:38 +03:00
<emulator > /usr/bin/qemu-system-x86_64</emulator>
backup: Parse and output checkpoint XML
Add a new file checkpoint_conf.c that performs the translation to and
from new XML describing a checkpoint. The code shares a common base
class with snapshots, since a checkpoint similarly represents the
domain state at a moment in time. Add some basic testing of round trip
XML handling through the new code.
Of note - this code intentionally differs from snapshots in that XML
schema validation is unconditional, rather than based on a public API
flag. We have many existing interfaces that still need to add a flag
for opt-in schema validation, but those interfaces have existing
clients that may not have been producing strictly-compliant XML, or we
may still uncover bugs where our RNG grammar is inconsistent with our
code (where omitting the opt-in flag allows existing apps to keep
working while waiting for an RNG patch). But since checkpoints are
brand-new, it's easier to ensure the code matches the schema by always
using the schema. If needed, a later patch could extend the API and
add a flag to turn on to request schema validation, rather than having
it forced (possibly just the validation of the <domain> sub-element
during REDEFINE) - but if a user encounters XML that looks like it
should be good but fails to validate with our RNG schema, they would
either have to upgrade to a new libvirt that adds the new flag, or
upgrade to a new libvirt that fixes the RNG schema, which implies
adding such a flag won't help much.
Also, the redefine flag requires the <domain> sub-element to be
present, rather than catering to historical back-compat to older
versions.
Signed-off-by: Eric Blake <eblake@redhat.com>
2018-07-08 05:01:14 +03:00
<disk type= 'file' device= 'disk' >
<driver name= 'qemu' type= 'qcow2' />
<source file= '/tmp/data.img' />
<target dev= 'vda' bus= 'virtio' />
<address type= 'pci' domain= '0x0000' bus= '0x00' slot= '0x03' function= '0x0' />
</disk>
<disk type= 'file' device= 'disk' >
<driver name= 'qemu' type= 'qcow2' />
<source file= '/tmp/logs.img' />
<target dev= 'vdb' bus= 'virtio' />
<address type= 'pci' domain= '0x0000' bus= '0x00' slot= '0x04' function= '0x0' />
</disk>
<controller type= 'usb' index= '0' >
<address type= 'pci' domain= '0x0000' bus= '0x00' slot= '0x01' function= '0x2' />
</controller>
<controller type= 'ide' index= '0' >
<address type= 'pci' domain= '0x0000' bus= '0x00' slot= '0x01' function= '0x1' />
</controller>
<controller type= 'pci' index= '0' model= 'pci-root' />
<input type= 'mouse' bus= 'ps2' />
<input type= 'keyboard' bus= 'ps2' />
<memballoon model= 'none' />
</devices>
</domain>
<active > 1</active>
</domaincheckpoint>