[libvirt] virStream: this function is not supported by the connection driver

Wido den Hollander wido at widodh.nl
Sun Jan 31 11:03:08 UTC 2016



On 01/31/2016 08:37 AM, Michal Privoznik wrote:
> On 30.01.2016 19:59, Wido den Hollander wrote:
>> Hi,
>>
>> I'm trying to implement the volUpload and volDownload functions for the
>> RBD storage driver but I keep getting this:
>>
>> 2016-01-30 18:56:11.675+0000: 6447: debug :
>> virStorageBackendRBDVolDownload:1395 : Read 4096 bytes at offset 0 from
>> RBD image libvirt/wido1
>>
>> 2016-01-30 18:56:11.675+0000: 6447: debug : virStreamSend:168 :
>> stream=0x7fe780000930, data=0x7fe780062df0, nbytes=4096
>>
>> 2016-01-30 18:56:11.675+0000: 6447: error : virStreamSend:186 : this
>> function is not supported by the connection driver: virStreamSend
>>
>> I reference to the stream with virStreamRef(stream); and then I use
>> virStreamSend() to write data to the stream, but that fails.
>>
>> I've looked through the source and couldn't find anything what might be
>> the issue.
>>
>> Libvirt is running locally on my system and I'm using qemu:///system to
>> connect locally with virsh.
>>
>> Do I need to initialize the stream in any way before I can write data to it?
> 
> Interesting, seems like all virStream drivers have implemented Send()
> and Recv() (what's the point in having them if they haven't, right?).
> How are you creating the stream? You know that you need to create the
> stream on both client and server side, right?
> 

It's in the storage backend driver, so I assume the stream has already
been created.

This is the code:
https://github.com/wido/libvirt/commit/bbb6403ebd952d7c3f2fba8c60f77087e06a2a22

static int
virStorageBackendRBDVolDownload(virConnectPtr conn,
                                virStoragePoolObjPtr pool,
                                virStorageVolDefPtr vol,
                                virStreamPtr stream,
                                unsigned long long offset,
                                unsigned long long length,
                                unsigned int flags)
..
..
virStreamRef(stream);
..
..
while (1) {
  rbd_read()
  virStreamSend(X, stream)
}


And that gives me the error I posted above.

I checked the docs: https://libvirt.org/html/libvirt-libvirt-stream.html

Couldn't find anything additional about what I needed to do. I assume
the storage driver creates the stream for me.

Wido

> Michal
> 




More information about the libvir-list mailing list