On Tue, Aug 29, 2017 at 11:17:13AM +0200, Michal Privoznik wrote:
On 08/28/2017 02:56 PM, Pavel Hrdina wrote:
> Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
> ---
> .../qemuxml2argv-channel-reconnect.args | 31 +++++++++++++++
> ...uxml2argv-chardev-reconnect-invalid-timeout.xml | 23 +++++++++++
> .../qemuxml2argv-chardev-reconnect.args | 40 +++++++++++++++++++
> .../qemuxml2argv-chardev-reconnect.xml | 46 ++++++++++++++++++++++
> tests/qemuxml2argvtest.c | 11 ++++++
> 5 files changed, 151 insertions(+)
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-channel-reconnect.args
> create mode 100644
tests/qemuxml2argvdata/qemuxml2argv-chardev-reconnect-invalid-timeout.xml
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-chardev-reconnect.args
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-chardev-reconnect.xml
>
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-reconnect.args
b/tests/qemuxml2argvdata/qemuxml2argv-channel-reconnect.args
> new file mode 100644
> index 0000000000..43a5d5bb3e
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-reconnect.args
> @@ -0,0 +1,31 @@
> +LC_ALL=C \
> +PATH=/bin \
> +HOME=/home/test \
> +USER=test \
> +LOGNAME=test \
> +QEMU_AUDIO_DRV=none \
> +/usr/bin/qemu-system-i686 \
> +-name QEMUGuest1 \
> +-S \
> +-M pc \
> +-m 214 \
> +-smp 1,sockets=1,cores=1,threads=1 \
> +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
> +-nographic \
> +-nodefconfig \
> +-nodefaults \
> +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
> +server,nowait \
> +-mon chardev=charmonitor,id=monitor,mode=readline \
> +-no-acpi \
> +-boot c \
> +-device virtio-serial-pci,id=virtio-serial1,bus=pci.0,addr=0xa \
> +-device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x3 \
> +-usb \
> +-chardev socket,id=charchannel0,host=localhost,port=1234,reconnect=10 \
> +-device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,\
> +id=channel0,name=asdf \
> +-chardev socket,id=charchannel1,path=/tmp/channel/domain--1-QEMUGuest1/fdsa,\
> +server,nowait,reconnect=10 \
This doesn't look right. How come a server can have reconnect at the
same time?
So there are two issues with our code:
1. We successfully parse this configuration:
...
<channel type='unix'>
<source mode='connect'/>
<target type='virtio' name='test'/>
</channel>
...
While formatting the XML we ignore the source element if there is no
path and the code starting a domain generates a new path and set's the
mode to 'bind'. With the reconnect patches if we parse the reconnect
it's unconditionally put to the command line if it was parsed even
though the mode was changed.
2. This test uses a path that matches a pattern of automatically
generated paths by libvirt:
...
<source mode='connect'
path='/tmp/channel/domain-oldname/fdsa'>
<reconnect enabled='no'/>
</source>
...
and our code removes that path in order to get it automatically
generated following new rules and also changes the mode to "bind" and
that leads to the same issue as for the first example.
I'll send a patches to fix it.
Pavel