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

Daniel Veillard veillard at redhat.com
Fri Dec 11 09:14:09 UTC 2009


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 at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list