[pve-devel] applied: [PATCH qemu-server] api create: cleanup the new config log on error
Thomas Lamprecht
t.lamprecht at proxmox.com
Tue Jun 12 10:57:13 CEST 2018
On 6/12/18 10:50 AM, Wolfgang Bumiller wrote:
> Otherwise cases like trying to restore a protected VM would
> leave a lock in the config.
>
thanks for the followup, applied
> Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
> ---
> PVE/API2/Qemu.pm | 36 ++++++++++++++++++++++++++++++++----
> 1 file changed, 32 insertions(+), 4 deletions(-)
>
> diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
> index a5ab282..c15c71f 100644
> --- a/PVE/API2/Qemu.pm
> +++ b/PVE/API2/Qemu.pm
> @@ -564,7 +564,10 @@ __PACKAGE__->register_method({
>
> PVE::AccessControl::add_vm_to_pool($vmid, $pool) if $pool;
>
> - PVE::API2::Qemu->vm_start({ vmid => $vmid, node => $node }) if $start_after_create;
> + if ($start_after_create) {
> + eval { PVE::API2::Qemu->vm_start({ vmid => $vmid, node => $node }) };
> + warn $@ if $@;
> + }
> };
>
> # ensure no old replication state are exists
> @@ -617,12 +620,37 @@ __PACKAGE__->register_method({
>
> if ($start_after_create) {
> print "Execute autostart\n";
> - PVE::API2::Qemu->vm_start({vmid => $vmid, node => $node});
> + eval { PVE::API2::Qemu->vm_start({vmid => $vmid, node => $node}) };
> + warn $@ if $@;
> }
> };
>
> - my $worker_name = $is_restore ? 'qmrestore' : 'qmcreate';
> - my $code = $is_restore ? $restorefn : $createfn;
> + my ($code, $worker_name);
> + if ($is_restore) {
> + $worker_name = 'qmrestore';
> + $code = sub {
> + eval { $restorefn->() };
> + if (my $err = $@) {
> + eval { PVE::QemuConfig->remove_lock($vmid, 'create') };
> + warn $@ if $@;
> + die $err;
> + }
> + };
> + } else {
> + $worker_name = 'qmcreate';
> + $code = sub {
> + eval { $createfn->() };
> + if (my $err = $@) {
> + eval {
> + my $conffile = PVE::QemuConfig->config_file($vmid);
> + unlink($conffile)
> + or die "failed to remove config file: $@\n";
> + };
> + warn $@ if $@;
> + die $err;
> + }
> + };
> + }
>
> return $rpcenv->fork_worker($worker_name, $vmid, $authuser, $code);
> }});
>
More information about the pve-devel
mailing list