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@xxxxxxxxxx> 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 :| _______________________________________________ libvirt-users mailing list libvirt-users@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvirt-users