web jobs are highest prio; make sql cleaner
This commit is contained in:
@@ -10,38 +10,33 @@ __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
|
|||||||
__PACKAGE__->table('tasty_jobs');
|
__PACKAGE__->table('tasty_jobs');
|
||||||
__PACKAGE__->result_source_instance->is_virtual(1);
|
__PACKAGE__->result_source_instance->is_virtual(1);
|
||||||
__PACKAGE__->result_source_instance->view_definition(<<ENDSQL
|
__PACKAGE__->result_source_instance->view_definition(<<ENDSQL
|
||||||
SELECT jobs.*, ds2.deferrals AS num_deferrals
|
WITH my_jobs AS
|
||||||
FROM (
|
(SELECT admin.* FROM admin
|
||||||
(SELECT me.*, 100 AS job_priority
|
LEFT OUTER JOIN device_skip ds
|
||||||
FROM admin me
|
ON (ds.backend = ? AND admin.device = ds.device
|
||||||
WHERE ( me.username IS NOT NULL OR me.action = ANY (string_to_array(btrim(?, '{"}'), '","')) )
|
AND admin.action = ANY (ds.actionset))
|
||||||
AND me.device NOT IN
|
WHERE ds.device IS NULL
|
||||||
(SELECT ds.device
|
ORDER BY random())
|
||||||
FROM device_skip ds
|
|
||||||
WHERE ( me.action = ANY (ds.actionset) OR
|
SELECT my_jobs.*,
|
||||||
(ds.deferrals >= ? AND ds.last_defer > ( LOCALTIMESTAMP - ?::interval )) )
|
CASE WHEN (my_jobs.username IS NOT NULL OR
|
||||||
AND ds.backend = ? AND ds.device = me.device)
|
my_jobs.action = ANY (string_to_array(btrim(?, '{"}'), '","')))
|
||||||
AND me.status = 'queued'
|
THEN 100
|
||||||
ORDER BY random()
|
ELSE 0
|
||||||
LIMIT ?)
|
END AS job_priority
|
||||||
UNION
|
FROM my_jobs
|
||||||
(SELECT me.*, 0 AS job_priority
|
|
||||||
FROM admin me
|
LEFT OUTER JOIN device_skip ds
|
||||||
WHERE NOT (me.action = ANY (string_to_array(btrim(?, '{"}'), '","')))
|
ON (ds.backend = ? AND ds.device = my_jobs.device)
|
||||||
AND me.device NOT IN
|
|
||||||
(SELECT ds.device
|
WHERE my_jobs.username IS NOT NULL
|
||||||
FROM device_skip ds
|
OR (ds.deferrals IS NULL AND ds.last_defer IS NULL)
|
||||||
WHERE ( me.action = ANY (ds.actionset) OR
|
OR ds.deferrals < ?
|
||||||
(ds.deferrals >= ? AND ds.last_defer > ( LOCALTIMESTAMP - ?::interval )) )
|
OR ds.last_defer <= ( LOCALTIMESTAMP - ?::interval )
|
||||||
AND ds.backend = ? AND ds.device = me.device)
|
|
||||||
AND me.status = 'queued'
|
ORDER BY job_priority DESC,
|
||||||
ORDER BY random()
|
ds.deferrals ASC NULLS FIRST,
|
||||||
LIMIT ?)
|
ds.last_defer ASC NULLS LAST
|
||||||
) jobs
|
|
||||||
LEFT OUTER JOIN device_skip ds2
|
|
||||||
ON ds2.backend = ? AND ds2.device = jobs.device
|
|
||||||
ORDER BY jobs.job_priority DESC,
|
|
||||||
ds2.deferrals ASC NULLS FIRST
|
|
||||||
LIMIT ?
|
LIMIT ?
|
||||||
ENDSQL
|
ENDSQL
|
||||||
);
|
);
|
||||||
@@ -77,8 +72,6 @@ __PACKAGE__->add_columns(
|
|||||||
{ data_type => "text", is_nullable => 1 },
|
{ data_type => "text", is_nullable => 1 },
|
||||||
"job_priority",
|
"job_priority",
|
||||||
{ data_type => "integer", is_nullable => 1 },
|
{ data_type => "integer", is_nullable => 1 },
|
||||||
"num_deferrals",
|
|
||||||
{ data_type => "integer", is_nullable => 1 },
|
|
||||||
);
|
);
|
||||||
|
|
||||||
__PACKAGE__->set_primary_key("job");
|
__PACKAGE__->set_primary_key("job");
|
||||||
|
|||||||
@@ -87,14 +87,11 @@ sub jq_getsome {
|
|||||||
my $jobs = schema('netdisco')->resultset('Admin');
|
my $jobs = schema('netdisco')->resultset('Admin');
|
||||||
my @returned = ();
|
my @returned = ();
|
||||||
|
|
||||||
my @filter = (
|
|
||||||
setting('job_prio')->{'high'}, setting('workers')->{'max_deferrals'},
|
|
||||||
setting('workers')->{'retry_after'}, setting('workers')->{'BACKEND'},
|
|
||||||
$num_slots,
|
|
||||||
);
|
|
||||||
my $tasty = schema('netdisco')->resultset('Virtual::TastyJobs')
|
my $tasty = schema('netdisco')->resultset('Virtual::TastyJobs')
|
||||||
->search(undef,{ bind => [
|
->search(undef,{ bind => [
|
||||||
@filter, @filter, setting('workers')->{'BACKEND'}, $num_slots
|
setting('workers')->{'BACKEND'}, setting('job_prio')->{'high'},
|
||||||
|
setting('workers')->{'BACKEND'}, setting('workers')->{'max_deferrals'},
|
||||||
|
setting('workers')->{'retry_after'}, $num_slots,
|
||||||
]});
|
]});
|
||||||
|
|
||||||
while (my $job = $tasty->next) {
|
while (my $job = $tasty->next) {
|
||||||
|
|||||||
Reference in New Issue
Block a user