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

Martin Kletzander mkletzan at redhat.com
Fri Dec 11 10:41:45 UTC 2015


On Thu, Dec 10, 2015 at 03:18:29PM -0500, John Ferlan wrote:
>
>
>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
>

This was a copy-paste from somewhere else, but I will add
MAX_CONFIG_FILE_SIZE both here and to that copy-paste source as well (if
I can find it ;)

>ACK
>
>John
>
>> +            goto error;
>> +
>> +        if (!(def = virDomainDefParseMinimal(NULL, xmlStr)))
>> +            goto error;
>> +
>>
>[...]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20151211/45195da1/attachment-0001.sig>


More information about the libvir-list mailing list