[libvirt PATCH v2 13/16] qemu: include nbdkit state in private xml

Peter Krempa pkrempa at redhat.com
Tue Sep 27 13:26:26 UTC 2022


On Wed, Aug 31, 2022 at 13:40:58 -0500, Jonathon Jongsma wrote:
> Add xml to the private data for a disk source to represent the nbdkit
> process so that the state can be re-created if the libvirt daemon is
> restarted. Format:
> 
>    <nbdkit>
>      <pidfile>/path/to/nbdkit.pid</pidfile>
>      <socketfile>/path/to/nbdkit.socket</socketfile>
>    </nbdkit>
> 
> Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
> ---
>  src/qemu/qemu_domain.c | 51 ++++++++++++++++++++++++++++++++++++++++++
>  src/qemu/qemu_nbdkit.c | 21 +++++++++++++++++
>  src/qemu/qemu_nbdkit.h |  4 ++++
>  3 files changed, 76 insertions(+)
> 
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index f69cfee0cf..cfc030cc9c 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -21,6 +21,7 @@
>  
>  #include <config.h>
>  
> +#include "qemu_conf.h"

Neither I nor the compiler found something which would require adding
this include.

>  #include "qemu_domain.h"
>  #include "qemu_alias.h"
>  #include "qemu_block.h"
> @@ -1816,6 +1817,31 @@ qemuStorageSourcePrivateDataAssignSecinfo(qemuDomainSecretInfo **secinfo,
>  }
>  
>  
> +static int
> +qemuStorageSourcePrivateDataParseNbdkit(xmlNodePtr node,
> +                                        xmlXPathContextPtr ctxt,
> +                                        virStorageSource *src)
> +{
> +    qemuDomainStorageSourcePrivate *srcpriv = qemuDomainStorageSourcePrivateFetch(src);
> +    g_autofree char *pidfile = NULL;
> +    g_autofree char *socketfile = NULL;
> +    VIR_XPATH_NODE_AUTORESTORE(ctxt);
> +
> +    ctxt->node = node;
> +
> +    if (!(pidfile = virXPathString("string(./pidfile)", ctxt)))
> +        return -1;
> +
> +    if (!(socketfile = virXPathString("string(./socketfile)", ctxt)))
> +        return -1;
> +
> +    if (!srcpriv->nbdkitProcess)

Looks like you can move this condition to the top to avoid parsing
anything if it's not going to be used.

> +        srcpriv->nbdkitProcess = qemuNbdkitProcessLoad(src, pidfile, socketfile);

I'm not entirely a fan of trying to read the pidfile in the parser but
doing it elsewhere would probably be worse.

> +
> +    return 0;
> +}
> +
> +
>  static int
>  qemuStorageSourcePrivateDataParse(xmlXPathContextPtr ctxt,
>                                    virStorageSource *src)


More information about the libvir-list mailing list