[libvirt PATCH v3 08/18] qemu: Add qemuNbdkitProcess
Peter Krempa
pkrempa at redhat.com
Wed Dec 7 13:52:22 UTC 2022
On Thu, Oct 20, 2022 at 16:58:59 -0500, Jonathon Jongsma wrote:
> An object for storing information about a nbdkit process that is serving
> a specific virStorageSource. At the moment, this information is just
> stored in the private data of virStorageSource and not used at all.
> Future commits will use this data to actually start a nbdkit process.
>
> Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
> ---
> src/qemu/qemu_conf.c | 23 ++++++++++++
> src/qemu/qemu_conf.h | 3 ++
> src/qemu/qemu_domain.c | 31 ++++++++++++++++
> src/qemu/qemu_domain.h | 4 +++
> src/qemu/qemu_nbdkit.c | 82 ++++++++++++++++++++++++++++++++++++++++++
> src/qemu/qemu_nbdkit.h | 26 ++++++++++++++
> 6 files changed, 169 insertions(+)
>
> diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
> index ae5bbcd138..0370429da0 100644
> --- a/src/qemu/qemu_conf.c
> +++ b/src/qemu/qemu_conf.c
> @@ -1641,3 +1641,26 @@ qemuHugepageMakeBasedir(virQEMUDriver *driver,
>
> return 0;
> }
> +
> +
> +/*
> + * qemuGetNbdkitCaps:
> + * @driver: the qemu driver
> + *
> + * Gets the capabilities for Nbdkit for the specified driver. These can be used
> + * to determine whether a particular disk source can be served by nbdkit or
> + * not.
> + *
> + * Returns: a reference to qemuNbdkitCaps or NULL
> + */
> +qemuNbdkitCaps*
> +qemuGetNbdkitCaps(virQEMUDriver *driver)
> +{
> + if (!driver->nbdkitBinary)
> + driver->nbdkitBinary = virFindFileInPath("nbdkit");
> +
> + if (driver->nbdkitBinary)
> + return virFileCacheLookup(driver->nbdkitCapsCache, driver->nbdkitBinary);
> +
> + return NULL;
> +}
> diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
> index 95c05e6888..8b4f6ce669 100644
> --- a/src/qemu/qemu_conf.h
> +++ b/src/qemu/qemu_conf.h
> @@ -323,6 +323,7 @@ struct _virQEMUDriver {
>
> /* Immutable pointer, self-locking APIs */
> virFileCache *nbdkitCapsCache;
> + char *nbdkitBinary;
The above statement doesn't apply to 'nbdkitBinary'. It's not immutable
because you update it in qemuGetNbdkitCaps and it also certainly doesn't
have self-locking APIS.
You can claim immutability if and only if it's assigned in
qemuStateInitialize and never changed afterwards.
I don't think we should cache the path though as it creates weird
situations where a different version of nbdkit placed in $PATH
preferentially will be picked up, but only after a restart.
This brings another issue though I think that the path to
modules/plugins should be detected from the actual NBDkit instance
rather than hardcoded:
$ nbdkit --dump-config
binary=/usr/sbin/nbdkit
bindir=/usr/bin
exit_with_parent=yes
filterdir=/usr/lib64/nbdkit/filters
host_cpu=x86_64
host_os=linux-gnu
libdir=/usr/lib64
mandir=/usr/share/man
name=nbdkit
plugindir=/usr/lib64/nbdkit/plugins
root_tls_certificates_dir=/etc/pki/nbdkit
sbindir=/usr/sbin
selinux=yes
sysconfdir=/etc
tls=yes
version=1.32.4
version_extra=nbdkit-1.32.4-1.fc37
version_major=1
version_minor=32
zstd=yes
This way each cached version will properly see the corresponding plugin
version. You also won't have a config-time option for it which can't be
changed after the package is installed.
More information about the libvir-list
mailing list