[pve-devel] [PATCH 3/6] clone live vm : add support for multiple jobs

Alexandre Derumier aderumier at odiso.com
Tue Oct 25 09:53:01 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