[pve-devel] [RFC PATCH container] fix setting same netX value several times

Fabian Grünbichler f.gruenbichler at proxmox.com
Wed Feb 5 12:20:43 CET 2020


On February 5, 2020 9:29 am, Dominik Csapak wrote:
> when setting a netX option that is semantically the same as the
> one already set but in a different order, e.g.:
> 
> in config:
> net0: name=eth0,bridge=vmbr0,hwaddr=AA:AA:AA:AA:AA:AA,type=veth
> setting via api:
> net0: bridge=vmbr0,name=eth0,hwaddr=AA:AA:AA:AA:AA:AA,type=veth
> 
> the code tries to 'hot-apply' the change (which is no change really)
> where the api line then gets parsed and printed which results
> in the same string already in the config
> 
> then we do a 'cleanup_pending' which removes it from pending, since
> the config already contains the exact same options, but
> then we overwrite the config from pending (which is empty)
> resulting in an invalid config line:
> --8<--
> net0:
> -->8--
> 
> to prevent this, we only overwrite the config here when
> there is still an option in in $conf->{pending}->{$opt}, meaning
> there was a meaningful change
> 
> Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
> ---
> i am not really sure if this is the correct place to fix this, because
> i think we never should trigger apply_pending when the requested
> config is semantically identical to what is already in the config,
> but i did not really see when or how to do that in a good and generic way
> (should be parse/print all property strings at the beginning?)
> so sending it as an rfc

I think the right way to do it is like in QemuServer.pm - don't cleanup 
pending while iterating over it, but before/after iteration.

>  src/PVE/LXC/Config.pm | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm
> index 310aba6..49b9f70 100644
> --- a/src/PVE/LXC/Config.pm
> +++ b/src/PVE/LXC/Config.pm
> @@ -1305,7 +1305,10 @@ sub vmconfig_apply_pending {
>  	    $add_apply_error->($opt, $err);
>  	} else {
>  	    $class->cleanup_pending($conf);
> -	    $conf->{$opt} = delete $conf->{pending}->{$opt};
> +	    # $conf->{pending}->{$opt} is now empty if we have the same
> +	    # value already in config, so do not overwrite the value in config
> +	    $conf->{$opt} = delete $conf->{pending}->{$opt}
> +		if defined($conf->{pending}->{$opt});
>  	}
>      }
>  
> -- 
> 2.20.1
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
> 
> 




More information about the pve-devel mailing list