[Libguestfs] [nbdkit PATCH v2 1/3] backend: Rework internal/filter error return semantics
Richard W.M. Jones
rjones at redhat.com
Tue Feb 6 15:40:15 UTC 2018
On Tue, Feb 06, 2018 at 08:42:13AM -0600, Eric Blake wrote:
> On 02/06/2018 01:05 AM, Richard W.M. Jones wrote:
> >
> >I had a think about this. How about (for the internal backend
> >interface only) returning an extra ‘int *err’ parameter?
>
> For backend only, or for backend and filters? The biggest reason
> for the change is so that filters can inspect/modify the error to
> push over the wire to the client. If for the filters, would it be
> for both the callbacks and the next_ops functions, or just the
> next_ops functions?
Initially I meant for the backend interface, but yes this could be
added to the filter interface as well. I believe for callbacks and
next_ops .. I think?
> >
> > int (*pread) (struct backend *, struct connection *conn, void *buf, uint32_t count, uint64_t offset, uint32_t flags, int *err);
> >
> >This has some advantages:
> >
> > - It's explicit.
> >
> > - It means we preserve the convention that -1 = error
> > used everywhere else in nbdkit.
> >
> > - Better for APIs that actually return something like get_size.
> >
> > - Can be both read and written.
>
> Seems like it might be reasonable enough, even though it's a bit
> more verbose; I can respin my series along those lines for
> comparison.
>
> Note that get_size() doesn't send an error over the wire to the
> client, so there, accessing errno in the filter doesn't buy much,
> and the filter really has no need to modify errno if failing its own
> .get_size callback. It's only the transmission functions (.pread,
> .pwrite, .flush, .trim, .zero) where getting at the error value
> matters.
>
OK. But we could add another callback in future which does return a
significant value.
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