[libvirt] [PATCH 01/14] Add XML flag for internal domain status

Daniel Veillard veillard at redhat.com
Mon Jul 20 12:18:38 UTC 2009


On Mon, Jul 20, 2009 at 12:51:11PM +0100, Mark McLoughlin wrote:
> We need to store things like device names and PCI slot numbers in the
> qemu domain state file so that we don't lose that information on
> libvirtd restart. Add a flag to indicate that this information should
> be parsed or formatted.
> 
> * include/libvirt/libvirt.h: add VIR_DOMAIN_XML_INTERNAL_STATUS
> 
> * src/domain_conf.c: pass the flag from virDomainObjParseXML() and
>   virDomainSaveStatus
> 
> * src/libvirt.c: reject the flag in virDomainGetXMLDesc()
> ---
>  include/libvirt/libvirt.h    |    3 ++-
>  include/libvirt/libvirt.h.in |    3 ++-
>  src/domain_conf.c            |    8 ++++----
>  src/libvirt.c                |    6 ++++++
>  4 files changed, 14 insertions(+), 6 deletions(-)
> 
> diff --git a/include/libvirt/libvirt.h b/include/libvirt/libvirt.h
> index 90007a1..07495fc 100644
> --- a/include/libvirt/libvirt.h
> +++ b/include/libvirt/libvirt.h
> @@ -585,7 +585,8 @@ int                     virDomainGetSecurityLabel (virDomainPtr domain,
>  
>  typedef enum {
>      VIR_DOMAIN_XML_SECURE = 1, /* dump security sensitive information too */
> -    VIR_DOMAIN_XML_INACTIVE = 2/* dump inactive domain information */
> +    VIR_DOMAIN_XML_INACTIVE = 2, /* dump inactive domain information */
> +    VIR_DOMAIN_XML_INTERNAL_STATUS = 4, /* dump internal domain status information */
>  } virDomainXMLFlags;
>  
>  char *                  virDomainGetXMLDesc     (virDomainPtr domain,
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index ba2b6f0..6794c61 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -585,7 +585,8 @@ int                     virDomainGetSecurityLabel (virDomainPtr domain,
>  
>  typedef enum {
>      VIR_DOMAIN_XML_SECURE = 1, /* dump security sensitive information too */
> -    VIR_DOMAIN_XML_INACTIVE = 2/* dump inactive domain information */
> +    VIR_DOMAIN_XML_INACTIVE = 2, /* dump inactive domain information */
> +    VIR_DOMAIN_XML_INTERNAL_STATUS = 4, /* dump internal domain status information */
>  } virDomainXMLFlags;
>  
>  char *                  virDomainGetXMLDesc     (virDomainPtr domain,
> diff --git a/src/domain_conf.c b/src/domain_conf.c
> index f3e4c6c..10e6ac6 100644
> --- a/src/domain_conf.c
> +++ b/src/domain_conf.c
> @@ -2896,7 +2896,8 @@ static virDomainObjPtr virDomainObjParseXML(virConnectPtr conn,
>  
>      oldnode = ctxt->node;
>      ctxt->node = config;
> -    obj->def = virDomainDefParseXML(conn, caps, ctxt, 0);
> +    obj->def = virDomainDefParseXML(conn, caps, ctxt,
> +                                    VIR_DOMAIN_XML_INTERNAL_STATUS);
>      ctxt->node = oldnode;
>      if (!obj->def)
>          goto error;
> @@ -4277,12 +4278,11 @@ int virDomainSaveStatus(virConnectPtr conn,
>                          const char *statusDir,
>                          virDomainObjPtr obj)
>  {
> +    int flags = VIR_DOMAIN_XML_SECURE|VIR_DOMAIN_XML_INTERNAL_STATUS;
>      int ret = -1;
>      char *xml;
>  
> -    if (!(xml = virDomainObjFormat(conn,
> -                                   obj,
> -                                   VIR_DOMAIN_XML_SECURE)))
> +    if (!(xml = virDomainObjFormat(conn, obj, flags)))
>          goto cleanup;
>  
>      if (virDomainSaveXML(conn, statusDir, obj->def, xml))
> diff --git a/src/libvirt.c b/src/libvirt.c
> index f4a7fa7..c8926b3 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c
> @@ -2730,6 +2730,12 @@ virDomainGetXMLDesc(virDomainPtr domain, int flags)
>          goto error;
>      }
>  
> +    if (flags & VIR_DOMAIN_XML_INTERNAL_STATUS) {
> +        virLibConnError(conn, VIR_ERR_OPERATION_DENIED,
> +                        _("virDomainGetXMLDesc with internal status flag"));
> +        goto error;
> +    }
> +
>      if (conn->driver->domainDumpXML) {
>          char *ret;
>          ret = conn->driver->domainDumpXML (domain, flags);

  Hum, that's very confusing. Why expose that flag at the API level
but forbid it's use from the API ?
  Seems to me adding an extra parameter to the internal function
virDomainDefParseXML() is a far cleaner way to do things by looking at
this patch.

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