mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-07-27 09:59:33 +00:00
replication - allow removal of jobs with target on local node
This commit is contained in:
parent
b7a20a34bf
commit
495aa710f2
@ -92,10 +92,12 @@ sub job_status {
|
|||||||
# only consider guest on local node
|
# only consider guest on local node
|
||||||
next if $vms->{ids}->{$vmid}->{node} ne $local_node;
|
next if $vms->{ids}->{$vmid}->{node} ne $local_node;
|
||||||
|
|
||||||
# never sync to local node
|
if (!$jobcfg->{remove_job}) {
|
||||||
next if $jobcfg->{target} eq $local_node;
|
# never sync to local node
|
||||||
|
next if $jobcfg->{target} eq $local_node;
|
||||||
|
|
||||||
next if $jobcfg->{disable};
|
next if $jobcfg->{disable};
|
||||||
|
}
|
||||||
|
|
||||||
my $state = $get_job_state->($stateobj, $jobcfg);
|
my $state = $get_job_state->($stateobj, $jobcfg);
|
||||||
$jobcfg->{state} = $state;
|
$jobcfg->{state} = $state;
|
||||||
@ -310,7 +312,7 @@ sub replicate {
|
|||||||
|
|
||||||
$logfunc->($start_time, "$jobid: start job removal - mode '${remove_job}'");
|
$logfunc->($start_time, "$jobid: start job removal - mode '${remove_job}'");
|
||||||
|
|
||||||
if ($remove_job eq 'full') {
|
if ($remove_job eq 'full' && $jobcfg->{target} ne $local_node) {
|
||||||
# remove all remote volumes
|
# remove all remote volumes
|
||||||
remote_prepare_local_job($ssh_info, $jobid, $vmid, [], 0, 1);
|
remote_prepare_local_job($ssh_info, $jobid, $vmid, [], 0, 1);
|
||||||
|
|
||||||
|
8
bin/test/replication_test6.log
Normal file
8
bin/test/replication_test6.log
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
1000 job_900_to_node1: new job next_sync => 1
|
||||||
|
1000 job_900_to_node1: start replication job
|
||||||
|
1000 job_900_to_node1: guest => 900, type => qemu, running => 0
|
||||||
|
1000 job_900_to_node1: volumes => local-zfs:vm-900-disk-1
|
||||||
|
1000 job_900_to_node1: start job removal - mode 'full'
|
||||||
|
1000 job_900_to_node1: job removed
|
||||||
|
1000 job_900_to_node1: end replication job
|
||||||
|
1000 job_900_to_node1: vanished job
|
65
bin/test/replication_test6.pl
Executable file
65
bin/test/replication_test6.pl
Executable file
@ -0,0 +1,65 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
# Note: Try to delete replication job with target on same node
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use JSON;
|
||||||
|
|
||||||
|
use lib ('.', '../..');
|
||||||
|
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
|
use Test::MockModule;
|
||||||
|
use ReplicationTestEnv;
|
||||||
|
|
||||||
|
$ReplicationTestEnv::mocked_nodename = 'node1';
|
||||||
|
|
||||||
|
my $mocked_delete_job = sub {
|
||||||
|
my ($jobid) = @_;
|
||||||
|
|
||||||
|
delete $ReplicationTestEnv::mocked_replication_jobs->{$jobid};
|
||||||
|
};
|
||||||
|
|
||||||
|
my $pve_replication_module = Test::MockModule->new('PVE::Replication');
|
||||||
|
$pve_replication_module->mock(
|
||||||
|
delete_job => $mocked_delete_job);
|
||||||
|
|
||||||
|
my $testjob = {
|
||||||
|
'type' => 'local',
|
||||||
|
'target' => 'node1',
|
||||||
|
'guest' => 900,
|
||||||
|
};
|
||||||
|
|
||||||
|
$ReplicationTestEnv::mocked_replication_jobs = {
|
||||||
|
job_900_to_node1 => {
|
||||||
|
remove_job => 'full',
|
||||||
|
type => 'local',
|
||||||
|
target => 'node1', # local node, job should be skipped
|
||||||
|
guest => 900,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
$ReplicationTestEnv::mocked_vm_configs = {
|
||||||
|
900 => {
|
||||||
|
node => 'node1',
|
||||||
|
snapshots => {},
|
||||||
|
ide0 => 'local-zfs:vm-900-disk-1,size=4G',
|
||||||
|
memory => 512,
|
||||||
|
ide2 => 'none,media=cdrom',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
ReplicationTestEnv::setup();
|
||||||
|
|
||||||
|
ReplicationTestEnv::openlog();
|
||||||
|
|
||||||
|
my $ctime = 1000;
|
||||||
|
for (my $i = 0; $i < 15; $i++) {
|
||||||
|
ReplicationTestEnv::track_jobs($ctime);
|
||||||
|
$ctime += 60;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReplicationTestEnv::commit_log();
|
||||||
|
|
||||||
|
exit(0);
|
Loading…
Reference in New Issue
Block a user