From ac81f933d79c2059089dc98d551e61c5b65d70de Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Mon, 8 Jan 2018 14:12:51 +0000 Subject: [PATCH] Ignore jobs started over 50 minutes ago (setting: jobs_stale_after) --- Changes | 6 ++++++ lib/App/Netdisco/JobQueue/PostgreSQL.pm | 12 +++++++++--- share/config.yml | 3 +++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Changes b/Changes index e7859bf3..bf3594e5 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,9 @@ +2.038007 + + [ENHANCEMENTS] + + * Ignore jobs started over 50 minutes ago (setting: jobs_stale_after) + 2.038006 [BUG FIXES] diff --git a/lib/App/Netdisco/JobQueue/PostgreSQL.pm b/lib/App/Netdisco/JobQueue/PostgreSQL.pm index 14b31cde..1b8dc2f3 100644 --- a/lib/App/Netdisco/JobQueue/PostgreSQL.pm +++ b/lib/App/Netdisco/JobQueue/PostgreSQL.pm @@ -154,6 +154,7 @@ sub jq_getsome { job => $job->id, -exists => $jobs->search({ status => { -like => 'queued-%' }, + started => \[q/> (now() - ?::interval)/, setting('jobs_stale_after')], %job_properties, })->as_query, }], @@ -170,8 +171,10 @@ sub jq_getsome { sub jq_locked { my @returned = (); - my $rs = schema('netdisco')->resultset('Admin') - ->search({ status => ('queued-'. setting('workers')->{'BACKEND'}) }); + my $rs = schema('netdisco')->resultset('Admin')->search({ + status => ('queued-'. setting('workers')->{'BACKEND'}), + started => \[q/> (now() - ?::interval)/, setting('jobs_stale_after')], + }); while (my $job = $rs->next) { push @returned, App::Netdisco::Backend::Job->new({ $job->get_columns }); @@ -197,7 +200,10 @@ sub jq_lock { try { my $updated = schema('netdisco')->resultset('Admin') ->search({ job => $job->id, status => 'queued' }, { for => 'update' }) - ->update({ status => ('queued-'. setting('workers')->{'BACKEND'}) }); + ->update({ + status => ('queued-'. setting('workers')->{'BACKEND'}), + started => \"now()", + }); $happy = true if $updated > 0; } diff --git a/share/config.yml b/share/config.yml index e5ffbc0e..d597abaf 100644 --- a/share/config.yml +++ b/share/config.yml @@ -284,6 +284,9 @@ workers: retry_after: '7 days' queue: PostgreSQL +# 50 minutes +jobs_stale_after: 3000 + dns: max_outstanding: 50 hosts_file: '/etc/hosts'