[libvirt] [PATCH 4/4] nwfilter: Save config to disk if we generated a UUID

John Ferlan jferlan at redhat.com
Fri Apr 29 21:44:07 UTC 2016



On 04/24/2016 07:22 PM, Cole Robinson wrote:
> libvirt-daemon-config-nwfilter will put a bunch of xml configs
> into /etc/libvirt/nwfilter. These configs don't hardcode a UUID
> and depends on libvirt to generate one. However the generated UUID
> is never saved to disk, unless the user manually calls Define.
> 
> This makes daemon reload quite noisy with many errors like:
> 
> error : virNWFilterObjAssignDef:3101 : operation failed: filter 'allow-incoming-ipv4' already exists with uuid 50def3b5-48d6-46a3-b005-cc22df4e5c5c
> 

ahhh... I was wondering about those...

> Because a new UUID is generated every time the config is read from
> disk, so libvirt constantly thinks it's finding a new nwfilter.
> 
> Detect if we generated a UUID when the config file is loaded; if so,
> resave the new contents to disk to ensure the UUID is persisteny.

persistent

> 
> This is similar to what was done in commit a47ae7c0 with virtual
> networks and generated MAC addresses
> ---
>  src/conf/nwfilter_conf.c | 6 ++++++
>  src/conf/nwfilter_conf.h | 1 +
>  2 files changed, 7 insertions(+)
> 
> diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c
> index d8e83f0..f9cb8ea 100644
> --- a/src/conf/nwfilter_conf.c
> +++ b/src/conf/nwfilter_conf.c
> @@ -2658,6 +2658,7 @@ virNWFilterDefParseXML(xmlXPathContextPtr ctxt)
>      }
>  
>      uuid = virXPathString("string(./uuid)", ctxt);
> +    ret->uuid_specified = (uuid != NULL);

I would think this would go in the else of the following if rather than
making the extra check...  Although I bet the compiler figures it out...


ACK -

John
>      if (uuid == NULL) {
>          if (virUUIDGenerate(ret->uuid) < 0) {
>              virReportError(VIR_ERR_INTERNAL_ERROR,
> @@ -3178,6 +3179,11 @@ virNWFilterLoadConfig(virNWFilterObjListPtr nwfilters,
>          goto error;
>      }
>  
> +    /* We generated a UUID, make it permanent by saving the config to disk */
> +    if (!def->uuid_specified &&
> +        virNWFilterSaveConfig(configDir, def) < 0)
> +        goto error;
> +
>      if (!(nwfilter = virNWFilterObjAssignDef(nwfilters, def))) {
>          goto error;
>      }
> diff --git a/src/conf/nwfilter_conf.h b/src/conf/nwfilter_conf.h
> index 823cfa4..ea3cd5c 100644
> --- a/src/conf/nwfilter_conf.h
> +++ b/src/conf/nwfilter_conf.h
> @@ -536,6 +536,7 @@ typedef virNWFilterDef *virNWFilterDefPtr;
>  struct _virNWFilterDef {
>      char *name;
>      unsigned char uuid[VIR_UUID_BUFLEN];
> +    bool uuid_specified;
>  
>      char *chainsuffix;
>      virNWFilterChainPriority chainPriority;
> 




More information about the libvir-list mailing list