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(a)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)