[pve-devel] [PATCH] fix : signal interrupt don't delete volume on full copy

Alexandre Derumier aderumier at odiso.com
Thu May 2 06:43:37 CEST 2013


Currently we  push newvolid to newvollist after qemu-img convert,
so if signal interrupt occur during qemu-img convert, the newvollist is empty and we can't free the volume

Instead, We need to push newvolid to newvollist just after volume creation

Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
 PVE/API2/Qemu.pm |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index dedb9ad..a933bdd 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -1994,6 +1994,8 @@ __PACKAGE__->register_method({
 			    if (!$param->{full} && PVE::Storage::volume_is_base($storecfg,  $drive->{file})) {
 				print "clone drive $opt ($drive->{file})\n";
 				$newvolid = PVE::Storage::vdisk_clone($storecfg,  $drive->{file}, $newid);
+				push @$newvollist, $newvolid;
+
 			    } else {
 				my ($storeid, $volname) = PVE::Storage::parse_volume_id($drive->{file});
 				$storeid = $storage if $storage;
@@ -2010,6 +2012,7 @@ __PACKAGE__->register_method({
 
 				print "copy drive $opt ($drive->{file})\n";
 				$newvolid = PVE::Storage::vdisk_alloc($storecfg, $storeid, $newid, $fmt, undef, ($size/1024));
+				push @$newvollist, $newvolid;
 
 				PVE::QemuServer::qemu_img_convert($drive->{file}, $newvolid, $size, $snapname);
 			    }
@@ -2017,7 +2020,6 @@ __PACKAGE__->register_method({
 			    my ($size) = PVE::Storage::volume_size_info($storecfg, $newvolid, 3);
 			    my $disk = { file => $newvolid, size => $size };
 			    $newconf->{$opt} = PVE::QemuServer::print_drive($vmid, $disk);
-			    push @$newvollist, $newvolid;
 
 			    PVE::QemuServer::update_config_nolock($newid, $newconf, 1);
 			}
-- 
1.7.10.4



More information about the pve-devel mailing list