Jim Fehlig wrote:
Anthony Liguori wrote:
Jim Fehlig wrote:
Tomorrow ended up being several days later :-). I looked at this
again today and must say that this is a frustrating bug - feeling
like some CS101 student.
So I was wrong in stating that xend does not respond to the create
op issued by libvirt. I get the expected response from xend but the
connection is not closed upon completing the request, thus I set in
some read loop in libvirt waiting for eof. I stepped through the
request processing code in xend for create op for both
paravirtualized and hvm guests and all seems fine, i.e. request is
processed, finished, socket closed, etc. in httpserver.py. Looking
at a packet trace shows connection is terminated for paravirt case
(which breaks out of the read loop in libvirt) but not so for hvm case.
The proper way to do the S-Expression RPC (or XML-RPC for that
matter) is to look at the Content-Length header in the response and
read back that much data (close()'ing the connection once you've
gotten that amount). We shouldn't wait for EOF to occur to stop
reading.
There was a patch recently that changed the read() behavior to read
in larger amounts. It appears that when this was added, the behavior
was changed to expect EOF. Sorry, I should have looked at that patch
more carefully. If you revert xend_post to the older code, things
should go back to working.
grr... Yes, this worked. So I'm able to launch hvm guests now but in
the process of incorporating comments about the XML format for such
guests I have come across another issue that could be handled in
libvirt but perhaps a better place would be xend. The issue is
structure of s-exp sent to xend. Currently xend appears to only
accept things such as (vnc 1), (cdrom /dev/hdd) within the (image (hvm
...)) node. Well xend does accept something like "... (image (hvm
...(boot d))) (cdrom /dev/hdd) (vnc 1)...", but the resulting domain
is not configured properly. With this config I get the following in
xend.log:
wrt the S-Expression format, that stuff is all changing in the very near
future. I've been sitting on patches to remove the S-Expression stuff
completely for a few weeks now. The thing that's kept me from
submitting it is that I haven't gotten around to enabling the XML-RPC
support in libvirt.
As soon as we get XML-RPC support working in libvirt, we can start
making some aggressive changes to the Xend side of the API.
Regards,
Anthony Liguori
[2006-05-10 17:11:48 xend] DEBUG (image:267) args: cdrom, val: None
This list has agreed that cdrom and graphics should be in the devices
section of libvirt's XML format, e.g.
<os>
<type>hvm</type>
...
<boot dev='hdd'>
<os>
<devices>
<disk type='block'>
<source dev='hdd'/>
<target dev='hdd'/>
<cdrom/>
</disk>
<graphics type='vnc'>
</graphics>
...
</devices>
I can certainly add code in libvirt to handle converting this XML to
the s-exp currently expected by xend but it makes for a larger patch.
It almost seems better to have xend accept definition of cdrom and
graphics outside of image node, e.g.
(image
(hvm
...
(boot d)
)
)
(cdrom /dev/hdd)
(vnc 1)
(other graphics-related options)
Any thoughts before I go off and rework the XML -> s-exp code in libvirt?
Regards,
Jim