fix : signal interrupt don't delete volume on full copy

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@odiso.com>
This commit is contained in:
Alexandre Derumier 2013-05-02 06:43:37 +02:00 committed by Dietmar Maurer
parent 751cc556dc
commit c6d0c8a702

View File

@ -1992,6 +1992,8 @@ __PACKAGE__->register_method({
if (!$param->{full} && PVE::Storage::volume_is_base($storecfg, $drive->{file})) { if (!$param->{full} && PVE::Storage::volume_is_base($storecfg, $drive->{file})) {
print "clone drive $opt ($drive->{file})\n"; print "clone drive $opt ($drive->{file})\n";
$newvolid = PVE::Storage::vdisk_clone($storecfg, $drive->{file}, $newid); $newvolid = PVE::Storage::vdisk_clone($storecfg, $drive->{file}, $newid);
push @$newvollist, $newvolid;
} else { } else {
my ($storeid, $volname) = PVE::Storage::parse_volume_id($drive->{file}); my ($storeid, $volname) = PVE::Storage::parse_volume_id($drive->{file});
$storeid = $storage if $storage; $storeid = $storage if $storage;
@ -2008,6 +2010,7 @@ __PACKAGE__->register_method({
print "copy drive $opt ($drive->{file})\n"; print "copy drive $opt ($drive->{file})\n";
$newvolid = PVE::Storage::vdisk_alloc($storecfg, $storeid, $newid, $fmt, undef, ($size/1024)); $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); PVE::QemuServer::qemu_img_convert($drive->{file}, $newvolid, $size, $snapname);
} }
@ -2015,7 +2018,6 @@ __PACKAGE__->register_method({
my ($size) = PVE::Storage::volume_size_info($storecfg, $newvolid, 3); my ($size) = PVE::Storage::volume_size_info($storecfg, $newvolid, 3);
my $disk = { file => $newvolid, size => $size }; my $disk = { file => $newvolid, size => $size };
$newconf->{$opt} = PVE::QemuServer::print_drive($vmid, $disk); $newconf->{$opt} = PVE::QemuServer::print_drive($vmid, $disk);
push @$newvollist, $newvolid;
PVE::QemuServer::update_config_nolock($newid, $newconf, 1); PVE::QemuServer::update_config_nolock($newid, $newconf, 1);
} }