plugins: Add .cache callback
commit13e18bd1ea384899be3f9c6e1183457e2c8fc054
authorEric Blake <eblake@redhat.com>
Wed, 15 May 2019 01:50:26 +0000 (14 20:50 -0500)
committerEric Blake <eblake@redhat.com>
Fri, 17 May 2019 21:24:31 +0000 (17 16:24 -0500)
treec06f2325ba2c587a69aadb82ace6adc765dfb8b0
parentfdf068178b10d970ff5df561df8d6ad24dead59d
plugins: Add .cache callback

Make it possible for plugins to advertise caching support, and to
implement their own caching algorithm.

There are no universally common cache algorithms (calling .pread and
ignoring the buffer works great for local files, but actually
penalizes remote network access), so the code intentionally defaults
.can_cache to NONE if .cache is missing. However, as both .pread
(files) and a silent no-op (for plugins serving data that only resides
in memory already) are common implementations, we allow .can_cache to
return success even when .cache is missing (which is different from
many of the other callbacks, where .can_FOO should not return true
unless .FOO is present). On the other hand, if only .cache is present,
defaulting .can_cache to NATIVE makes sense.  Thus, .can_cache is a
tri-state similar to .can_fua.

Signed-off-by: Eric Blake <eblake@redhat.com>
docs/nbdkit-plugin.pod
include/nbdkit-plugin.h
server/plugins.c