[Libguestfs] [PATCH nbdkit 2/2] tar: Rewrite the tar plugin (again), this time in C.

Eric Blake eblake at redhat.com
Mon Jul 6 19:08:26 UTC 2020


On 6/28/20 4:35 PM, Richard W.M. Jones wrote:

> For completeness here are the other ways I investigated:
> 
> * Make generic read, write, zero, trim, extents operations on local
>    files.  The file-like plugins would consume those directly, after
>    doing any adjustments eg for offset.  Unfortunately the operations
>    that you have to write are not very "pure" and depend on a bunch of
>    state across calls and you end up not having much common code:
>    https://github.com/libguestfs/nbdkit/blob/f6d4365364f2c90dde0166ae4355f74f28e112ff/plugins/file/file.c#L149
> 
> * Have the new tar plugin re-exec nbdkit and run the ordinary file
>    plugin + offset filter.  After experience with the VDDK plugin which
>    does this through necessity, I don't want to go there right now.
>    See this file to understand the kind of complexity this introduces:
>    https://github.com/libguestfs/nbdkit/blob/master/plugins/vddk/reexec.c
> 
> * Instead of writing a tar plugin, write a wrapper script which hands
>    off to file plugin + offset filter.  From the user's point of view
>    the script would work a lot differently from other plugins.
> 
> So no good ideas so far.

How hard is it to write a tar filter instead of a tar plugin (similar to 
how we moved ext2 from plugin to filter)?

- During .get_ready, we have to find some way to read the underlying 
plugin to feed a pipeline to tar to decode what the file contains (we 
can't just hand the file to tar, but instead have to feed it data 
through stdin; but the amount of work is no different: tar really does 
have to read the entire image during 'tar tRvf').
- There would no longer be a tar=... parameter, rather that is the role 
of the plugin
- We'd have to rename the file=... parameter to something that won't 
conflict with the most common use of having the file plugin serve the 
tar file
- But once we've done the .get_ready scan of the entire tar file, we can 
then service offsets to the plugin similarly to how the offset filter works

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org




More information about the Libguestfs mailing list