[libvirt-users] stream finish throws exception via python API

Daniel P. Berrange berrange at redhat.com
Wed Apr 27 08:26:58 UTC 2016


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 at 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 :|




More information about the libvirt-users mailing list