On Tue, Apr 26, 2016 at 03:17:19PM -0400, Cole Robinson wrote:
On 04/26/2016 02:56 PM, Nir Soffer wrote:
> On Tue, Apr 26, 2016 at 4:37 PM, Cole Robinson <crobinso(a)redhat.com> wrote:
>> On 04/26/2016 09:35 AM, Shahar Havivi wrote:
>>> On 26.04.16 15:30, Shahar Havivi wrote:
>>>> On 26.04.16 14:14, Shahar Havivi wrote:
>>>>> On 25.04.16 09:11, Cole Robinson wrote:
>>>>>> On 04/25/2016 08:10 AM, Shahar Havivi wrote:
>>>>>>> On 17.04.16 15:41, Shahar Havivi wrote:
>>>>>>>> Hi,
>>>>>>>> The following snippet works fine e.g. receiving the data
but when calling
>>>>>>>> stream.finish() we get the following error:
>>>>>>>>
>>>>>>>> stream = con.newStream()
>>>>>>>> vol.download(stream, 0, 0, 0)
>>>>>>>> buf = stream.recv(1024)
>>>>>>>> stream.finish()
>>>>>>>>
>>>>>>>> libvirt: I/O Stream Utils error : internal error: I/O
helper exited abnormally
>>>>>>>> Traceback (most recent call last):
>>>>>>>> File "./helpers/kvm2ovirt", line 149, in
<module>
>>>>>>>> download_volume(vol, item[1], diskno, disksitems,
pksize)
>>>>>>>> File "./helpers/kvm2ovirt", line 102, in
download_volume
>>>>>>>> stream.finish()
>>>>>>>> File
"/usr/lib64/python2.7/site-packages/libvirt.py", line 5501, in finish
>>>>>>>> if ret == -1: raise libvirtError
('virStreamFinish() failed')
>>>>>>>> libvirt.libvirtError: internal error: I/O helper exited
abnormally
>>>>>>>>
>>>>>>
>>>>>> The error message sucks, I'll send patches to improve it a
little at least.
>>>>>>
>>>>>> What's happening here is that the you haven't read all
the data you requested
>>>>>> (it's vol.download(path, offset, length, flags), length == 0
means read the
>>>>>> whole file which I suspect you haven't done). In this case
the iohelper
>>>>>> program that libvirt uses won't complete feeding us all the
data, and it exits
>>>>>> with SIGPIPE when we close the read end of the pipe.
>>>>>>
>>>>>> Now whether that should actually be an error condition is open
to debate.
>>>>>> virStreamFinish docs make it sound like it's legitimate to
throw an error if
>>>>>> it appears that all requested data wasn't read.
>>>>> Thanks checking...
>>>> Thanks Cole,
>>>> I modify our script and for checking if stream.recv() returns zero the
finish
>>>> works fine.
>>>> Our API needs to know the size of bytes that you are going to stream
back
>>>> which is not provided by the allocation and capacity.
>>>> (ie the same as du -s /path/to/disk)
>>>>
>>>> Shahar.
>>> We need the size of the image "Image end offset" you get from
"qemu-img check",
>>> Does libvirt have an API for that?
>>>
>>
>> Libvirt doesn't invoke qemu-img check anywhere AFAIK, so if that's the
only
>> way to get that info, then it isn't available
>
> We would like to report progress for downloads, so we need to know in advance
> what is the size of the download.
>
> I guess we can use an estimate (e.g. capacity * 1.1), or maybe someone have
> a better idea how to estimate the download size?
>
Hmm, I didn't realize <capacity> for a qcow2 volume isn't the full size on
disk, but instead the size of the virtual disk image. We should probably add
an extra volume field to report the actual on disk size too. Please file a
RHEL bug
<physical> is intended to give the actual size on disk.
Regards,
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|