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/bbb6403ebd952d7c3f2fba8c60f77087e0...
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