[Libguestfs] nbdkit: how to require use of filter

Nikolaus Rath Nikolaus at rath.org
Wed May 4 08:02:36 UTC 2022


On May 02 2022, eblake at redhat.com (Eric Blake) 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?
>
> At present, no.  What are you envisioning - enforcing that the plugin
> doesn't want to deal with sub-sector offsets and lengths?  Is there
> any other filter that would be useful to require, or can we focus more
> on the question about insisting on aligned requests?  Also, is your
> plugin mostly worried about enforcement of minimum block size (for
> example, no requests smaller than 512-byte alignment, which the
> blocksize filter gives with read-modify-write), or is it also worried
> about other features that the blocksize filter can add (such as
> splitting larger requests)?

I am only concerned about aligned writes, because the plugin can only
write blocks of a fixed size. It would be straightforward to handle
read-modify-write in the plugin, but I thought it would be nice if I
could use the existing nbdkit facilities for this.

Having large read/write requests split into blocksize units would also
be nice.

However, I do not need reads to be aligned.

> I did ask the question when we first added .block_size whether we
> should also provide a way for plugins to request the internal nbdkit
> server code to enforce limits (use of the nbdkit-blocksize-filter with
> read-modify-write is one way to obey underlying limits; but another
> way is to just up-front fail unaligned requests rather than passing
> them into the plugin).  We could either do this by enhancing the
> existing .block_size() function to add in a special return value to
> insist on strict enforcement (right now, we only document returning -1
> on error and 0 when successfully populating limits; we could add a
> documented return of 1), or by adding yet another callback (for
> example, if .strict_block_size is absent or returns 0, .block_size
> values are advisory to the client, but unaligned values reach the
> plugin; if .strict_block_size returns 1, .block_size values are
> enforced by nbdkit before reaching the plugin).
>
> Thoughts about that approach?

Extending block_size() for this purpose sounds good to me. I am not sure
if it's the best idea to fail unaligned requests though, I think I would
prefer if nbdkit could implicitly add the blocksize filter instead.



Best,
-Nikolaus

-- 
GPG Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F

             »Time flies like an arrow, fruit flies like a Banana.«



More information about the Libguestfs mailing list