[Libguestfs] [libnbd PATCH 4/4] api: Add DF flag support for pread

Richard W.M. Jones rjones at redhat.com
Tue May 28 16:00:22 UTC 2019


On Tue, May 28, 2019 at 10:23:13AM -0500, Eric Blake wrote:
> But having some sort of callback that gets invoked
> on each chunk would allow the client to add in such checking; we could
> even provide a utility function in the library to serve as such a
> callback if our checking is sufficient for the client's purposes.
> Something like:
> 
> nbd_pread_callback(nbd, buf, count, offset, opaque, callback, flags)
> 
> where we still read off the wire into buf (to avoid ping-ponging a read
> into a temporary buf that the callback then has to memcpy() into the
> real buf), but call the callback as soon as each chunk is received:
> 
> callback(opaque, buf, count, offset, status)

TBH this looks like the most simple & sensible API to me.

> telling the user which subset of buf was just populated, and where
> status is data, hole, or error. The signature may still need tweaking.
> Or we may even want to let the user register a set of callbacks, where a
> different callback is invoked for different chunk types:
> 
> set = nbd_callback_set_create(nbd, NBD_CMD_READ, opaque, default_cb,
> default_error_cb);
> nbd_callback_set_add(nbd, set, NBD_REPLY_TYPE_OFFSET_DATA, opaque, cb);
> nbd_callback_set_add(nbd, set, NBD_REPLY_TYPE_OFFSET_HOLE, opaque, cb);
> nbd_pread_callback(nbd, buf, count, offset, set, flags);

This would also work, with the caveat that the Python bindings will
currently crash if you try to do this.  I'm trying to fix that now.

> The idea of registering a set of callbacks to handle a particular
> integer command id may work well for other extensions as well;
> particularly if we encounter a case where an app wants to use libnbd for
> the groundwork (setting up a tls connection handshake) but still
> implement their own non-standard NBD extensions that the server will
> understand (where the libnbd state machine parses the chunks off the
> wire, but the client then interprets those chunks).  Which means we may
> also need hooks for a client to inject other NBD_OPT sequences into the
> state machine beyond what we know natively.

This could be interesting too.  I wonder if there are really going to
be such extensions?

> Various ideas still floating around, it may be a while before we
> actually have code to match those ideas in order to pick what works best.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html




More information about the Libguestfs mailing list