From a01119dd5196a41335a44752ecb9d3b665deb282 Mon Sep 17 00:00:00 2001 From: Thomas Lamprecht Date: Thu, 17 Oct 2019 19:13:01 +0200 Subject: [PATCH] Fix #2171: vm_start: volid based statefiles were not activated So, while we could just make this a special case before the config_to_command call and set the $conf->{vmstate} to the statefile for the case were it's a valid volumeid, the special case handling get's much easier when we do this outside of that method. So it's basically a trade-off, and after looking far to long at all nice revisions Alwin made for me and Fabians request, and even trying out different approaches, it was never perfect. But having slight code duplication over the movement mess I proposed (as I did not had the full picture then, sorry Alwin) felt like the slightly nicer trade off, as all worked I just use this one now, it has very clear semantics, easy to understand and that now three lines are duplicated is IMO irrelevant. Co-developed-by: Alwin Antreich Signed-off-by: Thomas Lamprecht (cherry picked from commit 5c1d42b7f825fa124ff3701b32f9ecc011bece95) [squashed the two fixups from master into this one] Signed-off-by: Thomas Lamprecht --- PVE/QemuConfig.pm | 3 +-- PVE/QemuServer.pm | 8 ++++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/PVE/QemuConfig.pm b/PVE/QemuConfig.pm index 84d601ae..f6a7f538 100644 --- a/PVE/QemuConfig.pm +++ b/PVE/QemuConfig.pm @@ -359,8 +359,7 @@ sub __snapshot_rollback_vm_start { my ($class, $vmid, $vmstate, $data) = @_; my $storecfg = PVE::Storage::config(); - my $statefile = PVE::Storage::path($storecfg, $vmstate); - PVE::QemuServer::vm_start($storecfg, $vmid, $statefile, undef, undef, undef, $data->{forcemachine}); + PVE::QemuServer::vm_start($storecfg, $vmid, $vmstate, undef, undef, undef, $data->{forcemachine}); } sub __snapshot_rollback_get_unused { diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 3238216d..60a377c7 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -4001,7 +4001,7 @@ sub config_to_command { if (my $vmstate = $conf->{vmstate}) { my $statepath = PVE::Storage::path($storecfg, $vmstate); - push @$vollist, $statepath; + push @$vollist, $vmstate; push @$cmd, '-loadstate', $statepath; } @@ -5277,8 +5277,12 @@ sub vm_start { push @$cmd, '-incoming', $migrate_uri; push @$cmd, '-S'; - } else { + } elsif (-e $statefile) { push @$cmd, '-loadstate', $statefile; + } else { + my $statepath = PVE::Storage::path($storecfg, $statefile); + push @$vollist, $statefile; + push @$cmd, '-loadstate', $statepath; } } elsif ($paused) { push @$cmd, '-S';