[libvirt] [PATCH 00/11] Generic data stream handling
Chris Lalancette
clalance at redhat.com
Mon Sep 21 08:07:47 UTC 2009
Daniel P. Berrange wrote:
>> 1) Immediately after starting the stream, I get a virStreamRecv() callback on
>> the destination side. The problem is that this is wrong for migration; there's
>> no data that I can read *from* the destination qemu process which makes any
>> sense. While I could implement the method and just throw away the data, that
>> doesn't seem right to me. This leads to...
>
> I realize this is due to the remoteAddClientStream() method in
> qemud/stream.c. It unconditionally sets 'stream->tx' to 1. I
> didn't notice the problem myself, since the test driver is using
> pipes which are unidirectional, but yor UNIX domain socket is
> bi-directional.
>
> We could either add a flag to remoteAddClientStream() to indicate
> whether the stream should allow read or write or both. Or you
> might be able to call shutdown(sockfd, SHUT_RD) on your UNIX
> socket to indicate that its only going to be used for write
> effectively making it unidirectional.
I tried the shutdown(sockfd, SHUT_RD) method, without success. Then I commented
out the stream->tx = 1 line as a test, and the migration (mostly) worked. At
least, it transferred the data to the other side, at which point trying to
"virsh console" on the destination side caused a libvirtd segfault again. So
your idea is correct, although I think we still have a problem with the cleanup
of the stream. I'm still debugging that.
--
Chris Lalancette
More information about the libvir-list
mailing list