my $tunnel = $self->{tunnel};
if ($self->{storage_migration}) {
- # finish block-job
- eval { PVE::QemuServer::qemu_drive_mirror_monitor($vmid, undef, $self->{storage_migration_jobs}, 'wait_noswap'); };
+ # finish block-job with block-job-cancel, to disconnect source VM from NBD
+ eval { PVE::QemuServer::qemu_drive_mirror_monitor($vmid, undef, $self->{storage_migration_jobs}, 'cancel'); };
if (my $err = $@) {
eval { PVE::QemuServer::qemu_blockjobs_cancel($vmid, $self->{storage_migration_jobs}) };
qemu_drive_mirror_monitor ($vmid, $vmiddst, $jobs, $completion, $qga);
}
+# $completion can be either
+# 'complete': wait until all jobs are ready, block-job-complete them (default)
+# 'cancel': wait until all jobs are ready, block-job-cancel them
+# 'skip': wait until all jobs are ready, return with block jobs in ready state
sub qemu_drive_mirror_monitor {
my ($vmid, $vmiddst, $jobs, $completion, $qga) = @_;
- $completion //= 'wait'; # same semantic as with 'skipcomplete' before
+ $completion //= 'complete';
eval {
my $err_complete = 0;
print "$job: Completing block job...\n";
my $op;
- if ($completion eq 'wait') {
+ if ($completion eq 'complete') {
$op = 'block-job-complete';
- } elsif ($completion eq 'wait_noswap') {
+ } elsif ($completion eq 'cancel') {
$op = 'block-job-cancel';
} else {
die "invalid completion value: $completion\n";
sub clone_disk {
my ($storecfg, $vmid, $running, $drivename, $drive, $snapname,
- $newvmid, $storage, $format, $full, $newvollist, $jobs, $skipcomplete, $qga, $bwlimit) = @_;
+ $newvmid, $storage, $format, $full, $newvollist, $jobs, $completion, $qga, $bwlimit) = @_;
my $newvolid;
if $drive->{iothread};
}
- qemu_drive_mirror($vmid, $drivename, $newvolid, $newvmid, $sparseinit, $jobs, $skipcomplete, $qga, $bwlimit);
+ qemu_drive_mirror($vmid, $drivename, $newvolid, $newvmid, $sparseinit, $jobs, $completion, $qga, $bwlimit);
}
}