my $get_next_job = sub {
my ($stateobj, $iteration, $start_time) = @_;
- my $next_jobid;
-
my $jobs = job_status($stateobj);
my $sort_func = sub {
my $jobcfg = $jobs->{$jobid};
next if $jobcfg->{state}->{last_iteration} >= $iteration;
if ($jobcfg->{next_sync} && ($start_time >= $jobcfg->{next_sync})) {
- $next_jobid = $jobid;
- last;
+ return $jobcfg;
}
}
- return undef if !$next_jobid;
-
- my $jobcfg = $jobs->{$next_jobid};
-
- $jobcfg->{state}->{last_iteration} = $iteration;
- $update_job_state->($stateobj, $jobcfg, $jobcfg->{state});
-
- return $jobcfg;
+ return undef;
};
sub replication_snapshot_name {
}
my $run_replication = sub {
- my ($stateobj, $jobcfg, $start_time, $logfunc) = @_;
+ my ($stateobj, $jobcfg, $iteration, $start_time, $logfunc) = @_;
- my $state = delete $jobcfg->{state};
+ my $state = $get_job_state->($stateobj, $jobcfg);
my $t0 = [gettimeofday];
$state->{pid} = $$;
$state->{ptime} = PVE::ProcFSTools::read_proc_starttime($state->{pid});
$state->{last_try} = $start_time;
+ $state->{last_iteration} = $iteration;
+
$update_job_state->($stateobj, $jobcfg, $state);
$logfunc->($start_time, "$jobcfg->{id}: start replication job") if $logfunc;
$jobcfg->{id} = $jobid;
$jobcfg->{vmtype} = $vms->{ids}->{$vmid}->{type};
- $jobcfg->{state}->{last_iteration} = $now;
- $update_job_state->($stateobj, $jobcfg, $jobcfg->{state});
-
- $run_replication->($stateobj, $jobcfg, $now, $logfunc);
+ $run_replication->($stateobj, $jobcfg, $now, $now, $logfunc);
};
my $res = PVE::Tools::lock_file($pvesr_lock_path, 60, $code);
my $start_time = $now // time();
while (my $jobcfg = $get_next_job->($stateobj, $iteration, $start_time)) {
- $run_replication->($stateobj, $jobcfg, $start_time, $logfunc);
+ $run_replication->($stateobj, $jobcfg, $iteration, $start_time, $logfunc);
$start_time = $now // time();
}
};