[Libguestfs] [PATCH nbdkit filters-v2 3/5] filters: Add nbdkit-offset-filter.

Richard W.M. Jones rjones at redhat.com
Fri Jan 19 17:15:47 UTC 2018


On Fri, Jan 19, 2018 at 10:39:09AM -0600, Eric Blake wrote:
> On 01/19/2018 09:23 AM, Richard W.M. Jones wrote:
> > This very basic filter allows you to select an offset and range within
> > a plugin, for example:
> > 
> >  nbdkit --filter=offset file file=foo offset=1M range=100M
> > 
> > which serves the byte range [ 1M .. 101M-1 ] from file ‘foo’.
> 
> I wonder - would it be possible to write a filter that performs
> concatenation?  I know we don't support multiple uses of a plugin in the
> same nbdkit process, but it might be possible to have a filter that
> allows '0..m-1' to forward to the normal plugin, and 'm..n-1' to forward
> to a forked nbdkit started on the nbd plugin wrapping the second use of
> the normal plugin (ie. you can't concatenate two uses of the nbd plugin,
> but you CAN concatenate the nbd plugin and any other plugin, with the
> end appearance of using the file plugin twice from a single nbdkit
> command line).

See the TODO file for my idea on that one:

https://github.com/libguestfs/nbdkit/blob/b22fff03d933bc3b25eaf1d40f45dcd063568bd6/TODO#L64

> Anyways, that's food for another patch, and I only thought about it as
> the inverse of what this filter is doing.
> 
> > +=over 4
> > +
> > +=item B<offset=OFFSET>
> > +
> > +The start offset.
> > +
> > +This parameter is required.
> 
> Can we support an implicit offset=0 if range= is provided (that is, the
> filter requires that at least one parameter appears)?  Can we support
> negative offsets as meaning relative to the end of the underlying file?

Yes, that's a good idea, will implement.

> > +
> > +=item B<range=LENGTH>
> > +
> > +The length of data to serve.
> > +
> > +This is optional.  If not given then the range is served starting from
> > +the offset through to the end of the underlying file/device.
> 
> Should we support negative ranges as a way to trim off that much of the
> tail of the file?

Yes, also a good idea.

> > +
> > +=back
> > +
> > +Note it is an error if the range parameter is supplied and
> > +C<offset+range> is larger than the size of data served by the
> > +underlying plugin.
> 
> Is it also an error if offset exceeds the size of the file?  Is there a
> technical limitation why range has to be non-zero, or can we allow
> serving a 0-length file (may be relevant later on when resize support
> comes into play)?

Yes it's an error and it needs an extra check.

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




More information about the Libguestfs mailing list