try to avoid duplicate execution of scheduled jobs
This commit is contained in:
@@ -18,14 +18,27 @@ sub refresh {
|
||||
my ($self, $job) = @_;
|
||||
|
||||
my $devices = schema('netdisco')->resultset('Device')->get_column('ip');
|
||||
my $jobqueue = schema('netdisco')->resultset('Admin');
|
||||
|
||||
schema('netdisco')->resultset('Admin')->populate([
|
||||
map {{
|
||||
device => $_,
|
||||
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',
|
||||
}} ($devices->all)
|
||||
]);
|
||||
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 {{
|
||||
device => $_,
|
||||
action => 'discover',
|
||||
status => 'queued',
|
||||
}} ($devices->all)
|
||||
]);
|
||||
});
|
||||
|
||||
return job_done("Queued discover job for all devices");
|
||||
}
|
||||
@@ -62,14 +75,27 @@ sub discovernew {
|
||||
my ($self, $job) = @_;
|
||||
|
||||
my $devices = schema('netdisco')->resultset('Device')->get_column('ip');
|
||||
my $jobqueue = schema('netdisco')->resultset('Admin');
|
||||
|
||||
schema('netdisco')->resultset('Admin')->populate([
|
||||
map {{
|
||||
device => $_,
|
||||
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',
|
||||
}} ($devices->all)
|
||||
]);
|
||||
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 {{
|
||||
device => $_,
|
||||
action => 'discover_neighbors',
|
||||
status => 'queued',
|
||||
}} ($devices->all)
|
||||
]);
|
||||
});
|
||||
|
||||
return job_done("Queued discover_neighbors job for all devices");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user