[pve-devel] [PATCH] Fix error handling if ram hot-plug fail.

Wolfgang Bumiller w.bumiller at proxmox.com
Thu Apr 7 12:52:58 CEST 2016


@Alexandre: pinging you about this, since you added the memory
hotplug/unplug code:

Does memory hot-*un*-plugging work for you? Does it need any
special guest OS? Because the `device_del` qmp command doesn't seem to
have any effect regardless of the `removable` or `online` states in the
guest's /sys/devices/system/memory/memory* files.

As bug #931 reports that it takes a huge amount of time for memory
unplugging to give up I also wonder why we retry 5 times with a timeout
of 3 seconds per dimm. Can't we just send the device_del commands for
all dimms at once, then wait 3 seconds _once_, then check? Why bother
with so many retries?
Of course the foreach_dimm*() would have to use qemu_dimm_list() instead
of assuming a default layout if eg. a remove command ended up removing
some dimms in between but failing on the last ones, otherwise further
changes will be problematic.

On Wed, Apr 06, 2016 at 10:24:35AM +0200, Wolfgang Link wrote:
> There is no need to cancel the program if the ram can't remove.
> The user will see that it is pending.
> ---
>  PVE/API2/Qemu.pm | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
> index 0d33f6c..96829c8 100644
> --- a/PVE/API2/Qemu.pm
> +++ b/PVE/API2/Qemu.pm
> @@ -960,7 +960,14 @@ my $update_vm_api  = sub {
>  	    if ($running) {
>  		my $errors = {};
>  		PVE::QemuServer::vmconfig_hotplug_pending($vmid, $conf, $storecfg, $modified, $errors);
> -		raise_param_exc($errors) if scalar(keys %$errors);
> +		if (scalar(keys %$errors)) {
> +		    foreach my $k (keys %$errors) {
> +			my $msg = $errors->{$k};
> +			$msg =~ s/\n/ /;
> +			print $msg;
> +			syslog('warning', "$k: $msg");
> +		    }
> +		}
>  	    } else {
>  		PVE::QemuServer::vmconfig_apply_pending($vmid, $conf, $storecfg, $running);
>  	    }
> -- 
> 2.1.4



More information about the pve-devel mailing list