[libvirt] [PATCH v2 07/10] conf: Optionally keep domains with invalid XML, but don't allow starting them

John Ferlan jferlan at redhat.com
Thu Dec 10 20:18:29 UTC 2015



On 12/01/2015 12:35 PM, Martin Kletzander wrote:
> Add new parameter to virDomainObjListLoadConfig() and
> virDomainObjListLoadAllConfigs() that controls whether domains with
> invalid XML (which could not be parsed) should be kept in order not to
> lose track of them.  For now, the parameter is set to false in all
> callers.  Each driver can switch it to true when it is prepared to deal
> with such domains.
> 
> For the domain object to be created add virDomainDefParseMinimal() that
> parses only name and UUID from the XML definition.  UUID must be
> present, it will not be generated.  The purpose of this function is to
> be used when all else fails, but we still want a domain object to work
> with.
> 
> Also explicitly disable adding the invalid domain into the list of
> active ones, as that would render our internal structures inconsistent.
> 
> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> ---
>  src/bhyve/bhyve_driver.c    |  2 ++
>  src/conf/domain_conf.c      | 36 +++++++++++++++++++++++
>  src/conf/domain_conf.h      |  7 +++++
>  src/conf/virdomainobjlist.c | 71 ++++++++++++++++++++++++++++++++++++++++++---
>  src/conf/virdomainobjlist.h |  1 +
>  src/libvirt_private.syms    |  1 +
>  src/libxl/libxl_driver.c    |  3 ++
>  src/lxc/lxc_driver.c        |  3 ++
>  src/qemu/qemu_driver.c      |  3 ++
>  src/uml/uml_driver.c        |  2 ++
>  10 files changed, 125 insertions(+), 4 deletions(-)
> 

[...]

> @@ -406,13 +416,57 @@ virDomainObjListLoadConfig(virDomainObjListPtr doms,
>      virDomainObjPtr dom;
>      int autostart;
>      virDomainDefPtr oldDef = NULL;
> +    char *xmlStr = NULL;
> +    char *xmlErr = NULL;
> 
>      if ((configFile = virDomainConfigFile(configDir, name)) == NULL)
>          goto error;
> -    if (!(def = virDomainDefParseFile(configFile, caps, xmlopt,
> -                                      VIR_DOMAIN_DEF_PARSE_INACTIVE |
> -                                      VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS)))
> -        goto error;
> +
> +    def = virDomainDefParseFile(configFile, caps, xmlopt,
> +                                VIR_DOMAIN_DEF_PARSE_INACTIVE |
> +                                VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS);
> +    if (!def) {
> +        char *tmp = NULL;
> +
> +        if (!keep_invalid)
> +            goto error;
> +
> +        if (VIR_STRDUP(xmlErr, virGetLastErrorMessage()) < 0)
> +            goto error;
> +
> +        if (virFileReadAll(configFile, 1024*1024*10, &xmlStr) < 0)

Any reason to not use MAX_CONFIG_FILE_SIZE?  Cannot imagine this
failing, but I mention for consistency

ACK

John

> +            goto error;
> +
> +        if (!(def = virDomainDefParseMinimal(NULL, xmlStr)))
> +            goto error;
> +
>
[...]




More information about the libvir-list mailing list