[pve-devel] [PATCH 3/6] clone live vm : add support for multiple jobs
Alexandre Derumier
aderumier at odiso.com
Mon Oct 24 23:24:08 CEST 2016
Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
PVE/API2/Qemu.pm | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index ad7a0c0..013203a 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -2398,21 +2398,29 @@ __PACKAGE__->register_method({
my $upid = shift;
my $newvollist = [];
+ my $jobs = {};
eval {
local $SIG{INT} = $SIG{TERM} = $SIG{QUIT} = $SIG{HUP} = sub { die "interrupted by signal\n"; };
PVE::Storage::activate_volumes($storecfg, $vollist, $snapname);
+ my $total_jobs = scalar(keys %{$drives});
+ my $i = 1;
+ my $skipcomplete = 1;
+
foreach my $opt (keys %$drives) {
+
my $drive = $drives->{$opt};
+ $skipcomplete = undef if $total_jobs == $i; #finish after last drive
my $newdrive = PVE::QemuServer::clone_disk($storecfg, $vmid, $running, $opt, $drive, $snapname,
- $newid, $storage, $format, $fullclone->{$opt}, $newvollist);
+ $newid, $storage, $format, $fullclone->{$opt}, $newvollist, $jobs, $skipcomplete);
$newconf->{$opt} = PVE::QemuServer::print_drive($vmid, $newdrive);
PVE::QemuConfig->write_config($newid, $newconf);
+ $i++;
}
delete $newconf->{lock};
@@ -2433,6 +2441,8 @@ __PACKAGE__->register_method({
if (my $err = $@) {
unlink $conffile;
+ eval { PVE::QemuServer::qemu_blockjobs_cancel($vmid, $jobs) };
+
sleep 1; # some storage like rbd need to wait before release volume - really?
foreach my $volid (@$newvollist) {
--
2.1.4
More information about the pve-devel
mailing list