summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
7827de4)
and add some more details to comments.
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
foreach my $opt (keys %$drives) {
my $drive = $drives->{$opt};
my $skipcomplete = ($total_jobs != $i); # finish after last drive
foreach my $opt (keys %$drives) {
my $drive = $drives->{$opt};
my $skipcomplete = ($total_jobs != $i); # finish after last drive
- my $completion = $skipcomplete ? 'skip' : 'wait';
+ my $completion = $skipcomplete ? 'skip' : 'complete';
my $src_sid = PVE::Storage::parse_volume_id($drive->{file});
my $storage_list = [ $src_sid ];
my $src_sid = PVE::Storage::parse_volume_id($drive->{file});
my $storage_list = [ $src_sid ];
my $tunnel = $self->{tunnel};
if ($self->{storage_migration}) {
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}) };
if (my $err = $@) {
eval { PVE::QemuServer::qemu_blockjobs_cancel($vmid, $self->{storage_migration_jobs}) };
qemu_drive_mirror_monitor ($vmid, $vmiddst, $jobs, $completion, $qga);
}
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) = @_;
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;
eval {
my $err_complete = 0;
print "$job: Completing block job...\n";
my $op;
print "$job: Completing block job...\n";
my $op;
- if ($completion eq 'wait') {
+ if ($completion eq 'complete') {
$op = 'block-job-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";
$op = 'block-job-cancel';
} else {
die "invalid completion value: $completion\n";
sub clone_disk {
my ($storecfg, $vmid, $running, $drivename, $drive, $snapname,
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) = @_;
- qemu_drive_mirror($vmid, $drivename, $newvolid, $newvmid, $sparseinit, $jobs, $skipcomplete, $qga, $bwlimit);
+ qemu_drive_mirror($vmid, $drivename, $newvolid, $newvmid, $sparseinit, $jobs, $completion, $qga, $bwlimit);