From 39a0efb3c35faade8303a4c96a45ac40d8633f90 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Mon, 28 Apr 2014 23:46:10 +0100 Subject: [PATCH] port Worker Common to pluggable jobqueue --- .../Netdisco/Daemon/JobQueue/PostgreSQL.pm | 8 ++++++ .../lib/App/Netdisco/Daemon/Worker/Common.pm | 25 ++++++++++--------- .../App/Netdisco/Daemon/Worker/Scheduler.pm | 1 + 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/Netdisco/lib/App/Netdisco/Daemon/JobQueue/PostgreSQL.pm b/Netdisco/lib/App/Netdisco/Daemon/JobQueue/PostgreSQL.pm index 9816a01d..ac09df48 100644 --- a/Netdisco/lib/App/Netdisco/Daemon/JobQueue/PostgreSQL.pm +++ b/Netdisco/lib/App/Netdisco/Daemon/JobQueue/PostgreSQL.pm @@ -18,4 +18,12 @@ sub jobqueue_insert { }); } +sub jobqueue_update { + my ($self, $settings) = @_; + + schema('netdisco')->resultset('Admin') + ->find(delete $settings->{id}, {for => 'update'}) + ->update($settings); +} + true; diff --git a/Netdisco/lib/App/Netdisco/Daemon/Worker/Common.pm b/Netdisco/lib/App/Netdisco/Daemon/Worker/Common.pm index 64292713..ea9b2dde 100644 --- a/Netdisco/lib/App/Netdisco/Daemon/Worker/Common.pm +++ b/Netdisco/lib/App/Netdisco/Daemon/Worker/Common.pm @@ -7,7 +7,8 @@ use Try::Tiny; use Role::Tiny; use namespace::clean; -requires qw/worker_type worker_name munge_action/; +with 'App::Netdisco::Daemon::JobQueue::'. setting('job_queue'); +requires qw/worker_type worker_name munge_action jobqueue_update/; sub worker_body { my $self = shift; @@ -65,19 +66,19 @@ sub close_job { # lock db row and either defer or complete the job try { if ($status eq 'defer') { - schema('netdisco')->resultset('Admin') - ->find($job->job, {for => 'update'}) - ->update({ status => 'queued' }); + $self->jobqueue_update({ + id => $job->job, + status => 'queued', + }); } else { - schema('netdisco')->resultset('Admin') - ->find($job->job, {for => 'update'}) - ->update({ - status => $status, - log => $log, - started => $job->started, - finished => $now, - }); + $self->jobqueue_update({ + id => $job->job, + status => $status, + log => $log, + started => $job->started, + finished => $now, + }); } # remove job from local queue diff --git a/Netdisco/lib/App/Netdisco/Daemon/Worker/Scheduler.pm b/Netdisco/lib/App/Netdisco/Daemon/Worker/Scheduler.pm index 14c7e5f9..141f4fa3 100644 --- a/Netdisco/lib/App/Netdisco/Daemon/Worker/Scheduler.pm +++ b/Netdisco/lib/App/Netdisco/Daemon/Worker/Scheduler.pm @@ -9,6 +9,7 @@ use Role::Tiny; use namespace::clean; with 'App::Netdisco::Daemon::JobQueue::'. setting('job_queue'); +requires 'jobqueue_insert'; sub worker_begin { my $self = shift;