only take one job at a time per worker

This commit is contained in:
Oliver Gorwits
2014-08-10 13:47:41 +01:00
parent 2366738d54
commit e9043b90e8
2 changed files with 20 additions and 25 deletions

View File

@@ -20,31 +20,30 @@ sub worker_body {
while (1) { while (1) {
prctl sprintf 'netdisco-daemon: worker #%s %s: idle', $wid, lc($type); prctl sprintf 'netdisco-daemon: worker #%s %s: idle', $wid, lc($type);
my $jobs = [ $self->{queue}->dequeue(1) ]; # FIXME multiple take, take type, thaw
foreach my $job (@$jobs) { my $job = $self->{queue}->dequeue(1);
next unless defined $job; next unless defined $job;
$job = schema('daemon')->dclone( $job );
my $target = $self->munge_action($job->action);
try { $job = schema('daemon')->dclone( $job ); # TODO stop using DBIC
$job->started(scalar localtime); my $target = $self->munge_action($job->action);
prctl sprintf 'netdisco-daemon: worker #%s %s: working on #%s: %s',
$wid, lc($type), $job->id, $job->summary;
info sprintf "$tag (%s): starting %s job(%s) at %s",
$wid, $target, $job->id, $job->started;
my ($status, $log) = $self->$target($job);
$job->status($status);
$job->log($log);
}
catch {
$job->status('error');
$job->log("error running job: $_");
$self->sendto('stderr', $job->log ."\n");
};
$self->close_job($job); try {
$job->started(scalar localtime);
prctl sprintf 'netdisco-daemon: worker #%s %s: working on #%s: %s',
$wid, lc($type), $job->id, $job->summary;
info sprintf "$tag (%s): starting %s job(%s) at %s",
$wid, $target, $job->id, $job->started;
my ($status, $log) = $self->$target($job);
$job->status($status);
$job->log($log);
} }
catch {
$job->status('error');
$job->log("error running job: $_");
$self->sendto('stderr', $job->log ."\n");
};
$self->close_job($job);
} }
} }

View File

@@ -101,10 +101,6 @@ jobs from the queue.
=head2 id (auto) =head2 id (auto)
=head2 type (required)
=head2 wid (required, default 0)
=head2 entered =head2 entered
=head2 started =head2 started