[libvirt] [PATCH] Fix detection of JSON when restarting libvirtd

The XML XPath for detecting JSON in the running VM statefile was wrong causing all VMs to get JSON mode enabled at libvirtd restart. In addition if a VM was running a JSON enabled QEMU once, and then altered to point to a non-JSON enabled QEMU later the 'monJSON' flag would not get reset to 0. * src/qemu/qemu_driver.c: Fix setting/detection of JSON mode --- src/qemu/qemu_driver.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0dccae6..3661ef0 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -220,8 +220,11 @@ static int qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data) priv->monConfig->type = VIR_DOMAIN_CHR_TYPE_PTY; VIR_FREE(tmp); - if (virXPathBoolean(NULL, "int(./monitor[1]/@json)", ctxt)) + if (virXPathBoolean(NULL, "count(./monitor[@json = '1']) > 0", ctxt)) { priv->monJSON = 1; + } else { + priv->monJSON = 0; + } switch (priv->monConfig->type) { case VIR_DOMAIN_CHR_TYPE_PTY: @@ -2361,7 +2364,9 @@ static int qemudStartVMDaemon(virConnectPtr conn, #if HAVE_YAJL if (qemuCmdFlags & QEMUD_CMD_FLAG_MONITOR_JSON) priv->monJSON = 1; + else #endif + priv->monJSON = 0; if ((ret = virFileDeletePid(driver->stateDir, vm->def->name)) != 0) { virReportSystemError(conn, ret, -- 1.6.5.2

On Wed, Dec 09, 2009 at 06:30:16PM +0000, Daniel P. Berrange wrote:
The XML XPath for detecting JSON in the running VM statefile was wrong causing all VMs to get JSON mode enabled at libvirtd restart.
In addition if a VM was running a JSON enabled QEMU once, and then altered to point to a non-JSON enabled QEMU later the 'monJSON' flag would not get reset to 0.
* src/qemu/qemu_driver.c: Fix setting/detection of JSON mode --- src/qemu/qemu_driver.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0dccae6..3661ef0 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -220,8 +220,11 @@ static int qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data) priv->monConfig->type = VIR_DOMAIN_CHR_TYPE_PTY; VIR_FREE(tmp);
- if (virXPathBoolean(NULL, "int(./monitor[1]/@json)", ctxt)) + if (virXPathBoolean(NULL, "count(./monitor[@json = '1']) > 0", ctxt)) { priv->monJSON = 1; + } else { + priv->monJSON = 0; + }
switch (priv->monConfig->type) { case VIR_DOMAIN_CHR_TYPE_PTY: @@ -2361,7 +2364,9 @@ static int qemudStartVMDaemon(virConnectPtr conn, #if HAVE_YAJL if (qemuCmdFlags & QEMUD_CMD_FLAG_MONITOR_JSON) priv->monJSON = 1; + else #endif + priv->monJSON = 0;
if ((ret = virFileDeletePid(driver->stateDir, vm->def->name)) != 0) { virReportSystemError(conn, ret,
ACK, the XPath is funky, but I guess I understand why :-) Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/
participants (2)
-
Daniel P. Berrange
-
Daniel Veillard