Richard W.M. Jones
2022-May-03 08:15 UTC
[Libguestfs] nbdkit: how to require use of filter
On Mon, May 02, 2022 at 10:25:44AM +0100, Nikolaus Rath wrote:> Hi, > > Is there a way for a nbdkit plugin to *require* use of a nbdkit filter > (specifically the nbdkit-blocksize-filter) programmatically?No it's not possible in general, you just have to document it. However as it's *blocksize* filter that you're talking about, I assume you mean that your filter has blocksize constraints, eg. that it cannot handle sub-sector requests. In this case it is possible to tell clients that they must not issue requests smaller than a certain size (and also hint about optimal and maximum sizes). You can do this by writing a .block_size callback. For example: https://gitlab.com/nbdkit/nbdkit/-/blob/1f5dc0679e570ca2fa149ceaa52922d70462b62c/plugins/vddk/vddk.c#L851 Not all clients obey these (although these clients are buggy!) In particular nbdcopy does not obey the minimum constraint, which actually causes a bug for us in virt-v2v. There's a long thread about it on qemu-devel of which the most important message is: https://www.mail-archive.com/qemu-devel at nongnu.org/msg865252.html I would advertise a block size constraint in your plugin, and if you find a client that doesn't request & then obey this constraint, get the author of the client to fix it :-) Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-top is 'top' for virtual machines. Tiny program with many powerful monitoring features, net stats, disk stats, logging, etc. http://people.redhat.com/~rjones/virt-top
On May 03 2022, rjones at redhat.com (Richard W.M. Jones) wrote:> On Mon, May 02, 2022 at 10:25:44AM +0100, Nikolaus Rath wrote: >> Hi, >> >> Is there a way for a nbdkit plugin to *require* use of a nbdkit filter >> (specifically the nbdkit-blocksize-filter) programmatically? > > No it's not possible in general, you just have to document it. > > However as it's *blocksize* filter that you're talking about, I assume > you mean that your filter has blocksize constraints, eg. that it > cannot handle sub-sector requests. In this case it is possible to > tell clients that they must not issue requests smaller than a certain > size (and also hint about optimal and maximum sizes). You can do this > by writing a .block_size callback. For example: > > https://gitlab.com/nbdkit/nbdkit/-/blob/1f5dc0679e570ca2fa149ceaa52922d70462b62c/plugins/vddk/vddk.c#L851 > > Not all clients obey these (although these clients are buggy!)Do you happen to know if the kernel's NBD client obeys them? (I assume setting a blocksize constraint implies an alignment constraint as well?) Best, -Nikolaus -- GPG Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F ?Time flies like an arrow, fruit flies like a Banana.?