[libvirt] [PATCHv2] xml: introduce startupPolicy for chardev device
Seiji Aguchi
seiji.aguchi at hds.com
Wed May 29 00:14:31 UTC 2013
Eric,
> -----Original Message-----
> From: libvir-list-bounces at redhat.com [mailto:libvir-list-bounces at redhat.com] On Behalf Of Eric Blake
> Sent: Tuesday, May 28, 2013 7:08 PM
> Cc: libvir-list at redhat.com; dle-develop at lists.sourceforge.net; Tomoki Sekiyama
> Subject: Re: [libvirt] [PATCHv2] xml: introduce startupPolicy for chardev device
>
> On 05/24/2013 04:46 PM, Eric Blake wrote:
> > From: Seiji Aguchi <seiji.aguchi at hds.com>
> >
> > [Problem]
> > Currently, guest OS's messages can be logged to a local disk of host OS
> > by creating chadevs with options below.
> > -chardev file,id=charserial0,path=<log file's path> -device isa-serial,chardev=chardevserial0,id=serial0
>
> >
> > Seiji's patch plus my initial review comments; I've ack'd this much,
> > but want to add a round-trip xml2xml test before pushing anything
> > (Seiji, if you want to use this as a starting point, rather than
> > waiting for my long weekend, feel free to post a v3).
>
>
> Sorry, but this needs a v3, and I'm going to hand it back to you to fix.
> I tried adding a testsuite, but it proved that you weren't outputting
> the startupPolicy during dumpxml formatting. My initial attempt to add
> it backfired (I'll post it below);
Thank you for handling/testing my patch.
>I'm worried that we are playing too
> fast and loose with a union type, since even with my patch in place,
> 'make check' fails with problems like:
>
> 84) QEMU XML-2-XML serial-dev ...
> Offset 913
> Expect [/>
> <target port='0'/>
> </serial>
> <console type='dev'>
> <source path='/dev/ttyS2]
> Actual [ startupPolicy='(null)'/>
> <target port='0'/>
> </serial>
> <console type='dev'>
> <source path='/dev/ttyS2' startupPolicy='(null)]
>
> which is a bug, since you said startupPolicy should only be tied to
> files and not other <serial> types. Do we need to repeat the
> startupPolicy on the <console> mirror of the first <serial> device, or
> is that unnecessary back-compat, and where we can safely declare that
> startupPolicy is only emitted for the <serial> side of things?
>
I need to think carefully about it before deciding it in a hurry.
> All told, your patch is not complete until it passes 'make check' with a
> new xml2xml test that proves we can round trip the new policy.
Anyway, I will post the v3 patch by fixing the issue.
Seiji
>
> diff --git c/src/conf/domain_conf.c w/src/conf/domain_conf.c
> index c24a9f0..5af5e40 100644
> --- c/src/conf/domain_conf.c
> +++ w/src/conf/domain_conf.c
> @@ -14547,8 +14547,14 @@ virDomainChrSourceDefFormat(virBufferPtr buf,
> if (def->type != VIR_DOMAIN_CHR_TYPE_PTY ||
> (def->data.file.path &&
> !(flags & VIR_DOMAIN_XML_INACTIVE))) {
> - virBufferEscapeString(buf, " <source path='%s'/>\n",
> + virBufferEscapeString(buf, " <source path='%s'",
> def->data.file.path);
> +
> + if (def->data.file.path && def->data.file.startupPolicy) {
> + const char *policy =
> virDomainStartupPolicyTypeToString(def->data.file.startupPolicy);
> + virBufferAsprintf(buf, " startupPolicy='%s'", policy);
> + }
> + virBufferAddLit(buf, "/>\n");
> }
> break;
>
> diff --git
> c/tests/qemuxml2argvdata/qemuxml2argv-serial-source-optional.args
> w/tests/qemuxml2argvdata/qemuxml2argv-serial-source-optional.args
> new file mode 100644
> index 0000000..24977f2
> --- /dev/null
> +++ w/tests/qemuxml2argvdata/qemuxml2argv-serial-source-optional.args
> @@ -0,0 +1,8 @@
> +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu
> -S -M \
> +pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults \
> +-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
> +-mon chardev=charmonitor,id=monitor,mode=readline \
> +-no-acpi -boot c -usb -hdc /tmp/idedisk.img \
> +-chardev file,id=charserial0,path=/tmp/serial.log \
> +-device isa-serial,chardev=charserial0,id=serial0 \
> +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
> diff --git
> c/tests/qemuxml2argvdata/qemuxml2argv-serial-source-optional.xml
> w/tests/qemuxml2argvdata/qemuxml2argv-serial-source-optional.xml
> new file mode 100644
> index 0000000..34e0eb9
> --- /dev/null
> +++ w/tests/qemuxml2argvdata/qemuxml2argv-serial-source-optional.xml
> @@ -0,0 +1,35 @@
> +<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>
> + <type arch='i686' machine='pc'>hvm</type>
> + <boot dev='hd'/>
> + </os>
> + <clock offset='utc'/>
> + <on_poweroff>destroy</on_poweroff>
> + <on_reboot>restart</on_reboot>
> + <on_crash>destroy</on_crash>
> + <devices>
> + <emulator>/usr/bin/qemu</emulator>
> + <disk type='file' device='disk'>
> + <source file='/tmp/idedisk.img'/>
> + <target dev='hdc' bus='ide'/>
> + <address type='drive' controller='0' bus='0' target='0' unit='2'/>
> + </disk>
> + <controller type='usb' index='0'/>
> + <controller type='ide' index='0'/>
> + <controller type='pci' index='0' model='pci-root'/>
> + <serial type='file'>
> + <source path='/tmp/serial.log' startupPolicy='optional'/>
> + <target port='0'/>
> + </serial>
> + <console type='file'>
> + <source path='/tmp/serial.log'/>
> + <target type='serial' port='0'/>
> + </console>
> + <memballoon model='virtio'/>
> + </devices>
> +</domain>
> diff --git c/tests/qemuxml2argvtest.c w/tests/qemuxml2argvtest.c
> index 2c7fd01..22f4782 100644
> --- c/tests/qemuxml2argvtest.c
> +++ w/tests/qemuxml2argvtest.c
> @@ -727,6 +727,8 @@ mymain(void)
> QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
> DO_TEST("console-compat-chardev",
> QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
> + DO_TEST("serial-source-optional",
> + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
>
> DO_TEST("channel-guestfwd",
> QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
> diff --git c/tests/qemuxml2xmltest.c w/tests/qemuxml2xmltest.c
> index 64a271c..1147519 100644
> --- c/tests/qemuxml2xmltest.c
> +++ w/tests/qemuxml2xmltest.c
> @@ -86,6 +86,8 @@ testCompareXMLToXMLHelper(const void *data)
> ret = testCompareXMLToXMLFiles(xml_in,
> info->different ? xml_out : xml_in,
> false);
> + if (ret < 0)
> + goto cleanup;
> }
> if (info->when & WHEN_ACTIVE) {
> ret = testCompareXMLToXMLFiles(xml_in,
> @@ -231,6 +233,7 @@ mymain(void)
> DO_TEST("console-virtio-many");
> DO_TEST("channel-guestfwd");
> DO_TEST("channel-virtio");
> + DO_TEST("serial-source-optional");
>
> DO_TEST("hostdev-usb-address");
> DO_TEST("hostdev-pci-address");
>
>
> --
> Eric Blake eblake redhat com +1-919-301-3266
> Libvirt virtualization library http://libvirt.org
More information about the libvir-list
mailing list