try to avoid duplicate execution of scheduled jobs
This commit is contained in:
@@ -18,14 +18,27 @@ sub refresh {
|
|||||||
my ($self, $job) = @_;
|
my ($self, $job) = @_;
|
||||||
|
|
||||||
my $devices = schema('netdisco')->resultset('Device')->get_column('ip');
|
my $devices = schema('netdisco')->resultset('Device')->get_column('ip');
|
||||||
|
my $jobqueue = schema('netdisco')->resultset('Admin');
|
||||||
|
|
||||||
schema('netdisco')->resultset('Admin')->populate([
|
schema('netdisco')->txn_do(sub {
|
||||||
|
# clean up user submitted jobs older than 1min,
|
||||||
|
# assuming skew between schedulers' clocks is not greater than 1min
|
||||||
|
$jobqueue->search({
|
||||||
|
action => 'discover',
|
||||||
|
status => 'queued',
|
||||||
|
entered => { '<' => \"(now() - interval '1 minute')" },
|
||||||
|
})->delete;
|
||||||
|
|
||||||
|
# is scuppered by any user job submitted in last 1min (bad), or
|
||||||
|
# any similar job from another scheduler (good)
|
||||||
|
$jobqueue->populate([
|
||||||
map {{
|
map {{
|
||||||
device => $_,
|
device => $_,
|
||||||
action => 'discover',
|
action => 'discover',
|
||||||
status => 'queued',
|
status => 'queued',
|
||||||
}} ($devices->all)
|
}} ($devices->all)
|
||||||
]);
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
return job_done("Queued discover job for all devices");
|
return job_done("Queued discover job for all devices");
|
||||||
}
|
}
|
||||||
@@ -62,14 +75,27 @@ sub discovernew {
|
|||||||
my ($self, $job) = @_;
|
my ($self, $job) = @_;
|
||||||
|
|
||||||
my $devices = schema('netdisco')->resultset('Device')->get_column('ip');
|
my $devices = schema('netdisco')->resultset('Device')->get_column('ip');
|
||||||
|
my $jobqueue = schema('netdisco')->resultset('Admin');
|
||||||
|
|
||||||
schema('netdisco')->resultset('Admin')->populate([
|
schema('netdisco')->txn_do(sub {
|
||||||
|
# clean up user submitted jobs older than 1min,
|
||||||
|
# assuming skew between schedulers' clocks is not greater than 1min
|
||||||
|
$jobqueue->search({
|
||||||
|
action => 'discover_neighbors',
|
||||||
|
status => 'queued',
|
||||||
|
entered => { '<' => \"(now() - interval '1 minute')" },
|
||||||
|
})->delete;
|
||||||
|
|
||||||
|
# is scuppered by any user job submitted in last 1min (bad), or
|
||||||
|
# any similar job from another scheduler (good)
|
||||||
|
$jobqueue->populate([
|
||||||
map {{
|
map {{
|
||||||
device => $_,
|
device => $_,
|
||||||
action => 'discover_neighbors',
|
action => 'discover_neighbors',
|
||||||
status => 'queued',
|
status => 'queued',
|
||||||
}} ($devices->all)
|
}} ($devices->all)
|
||||||
]);
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
return job_done("Queued discover_neighbors job for all devices");
|
return job_done("Queued discover_neighbors job for all devices");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user