[pve-devel] [PATCH v2 qemu-server 5/5] hotplug_pending: allow partial fast plugging

Thomas Lamprecht t.lamprecht at proxmox.com
Tue Mar 10 11:25:23 CET 2020


On 2/19/20 5:07 PM, Oguz Bektas wrote:
> adds a loop after the main fastplug loop, to check if any of the options
> are partially fast pluggable.
> 
> these are defined in $partial_fast_plug_option
> 
> Signed-off-by: Oguz Bektas <o.bektas at proxmox.com>
> ---
> 
> v1->v2:
> * set $changes according to partial_fast_plug result as well as fast_plug result
> * do cleanup_pending before writing fastplug changes
> 
> 
> 
>  PVE/QemuConfig.pm |  7 +++++++
>  PVE/QemuServer.pm | 19 +++++++++++++++++++
>  2 files changed, 26 insertions(+)
> 
> diff --git a/PVE/QemuConfig.pm b/PVE/QemuConfig.pm
> index 1ba728a..d1727b2 100644
> --- a/PVE/QemuConfig.pm
> +++ b/PVE/QemuConfig.pm
> @@ -399,6 +399,13 @@ sub __snapshot_foreach_volume {
>  
>      PVE::QemuServer::foreach_drive($conf, $func);
>  }
> +
> +sub get_partial_fast_plug_option {
> +    my ($class) = @_;
> +
> +    return $PVE::QemuServer::partial_fast_plug_option;
> +}
> +
>  # END implemented abstract methods from PVE::AbstractConfig
>  
>  1;
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index 44d0dee..8a689a0 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -4732,6 +4732,18 @@ my $fast_plug_option = {
>      'tags' => 1,
>  };
>  
> +# name of opt
> +# -> fmt -> format variable
> +# -> properties -> fastpluggable options hash
> +our $partial_fast_plug_option = {
> +    agent => {
> +	fmt => $agent_fmt,
> +	properties => {
> +	    fstrim_cloned_disks => 1
> +	},
> +    },
> +};

this belongs solely in the get_partial_fast_plug_option method, I do not want
to tighten the cyclic use of both modules and it's not required here.

> +
>  # hotplug changes in [PENDING]
>  # $selection hash can be used to only apply specified options, for
>  # example: { cores => 1 } (only apply changed 'cores')
> @@ -4761,7 +4773,14 @@ sub vmconfig_hotplug_pending {
>  	}
>      }
>  
> +    foreach my $opt (keys %{$conf->{pending}}) {
> +	if ($partial_fast_plug_option->{$opt}) {
> +	    $changes ||= PVE::QemuConfig->partial_fast_plug($conf, $opt);
> +	}
> +    }

with my followup for the guest-common series where I early return with 0 (no
change) if no partial_fast_plug_option is set for $opt you could just do:

for my $opt (keys %{$conf->{pending}}) {
    $changes ||= PVE::QemuConfig->partial_fast_plug($conf, $opt);
}

This avoids a split of logic between here and the guest common method, i.e.,
untangles spaghetti code a bit :)

> +
>      if ($changes) {
> +	PVE::QemuConfig->cleanup_pending($conf);
>  	PVE::QemuConfig->write_config($vmid, $conf);
>      }
>  
> 





More information about the pve-devel mailing list