1package Qudo::Job; 2use strict; 3use warnings; 4 5sub new { 6 my ($class, %args) = @_; 7 bless {%args}, $class; 8} 9 10sub id { $_[0]->{job_data}->{job_id} } 11sub uniqkey { $_[0]->{job_data}->{job_uniqkey} } 12sub func_id { $_[0]->{job_data}->{func_id} } 13 14sub funcname { 15 my $self = shift; 16 $self->manager->funcid_to_name($self->func_id, $self->db); 17} 18 19sub retry_cnt { $_[0]->{job_data}->{job_retry_cnt} } 20sub grabbed_until { $_[0]->{job_data}->{job_grabbed_until} } 21sub priority { $_[0]->{job_data}->{job_priority} } 22sub arg : lvalue { $_[0]->{job_data}->{job_arg} } 23sub arg_origin : lvalue { $_[0]->{arg_origin} } 24sub db { $_[0]->{db} } 25 26sub manager { $_[0]->{manager} } 27sub job_start_time : lvalue { $_[0]->{job_start_time} } 28 29sub completed { 30 my $self = shift; 31 32 $self->{_complete} = 1; 33 34 return unless $self->funcname->set_job_status; 35 $self->manager->set_job_status($self, 'completed'); 36} 37 38sub is_completed { $_[0]->{_complete} } 39sub is_aborted { $_[0]->{_abort} } 40sub is_failed { $_[0]->{_fail} } 41 42sub reenqueue { 43 my ($self, $args) = @_; 44 $self->manager->reenqueue($self, $args); 45} 46 47sub dequeue { 48 my $self = shift; 49 $self->manager->dequeue($self); 50} 51 52sub error { 53 my ($self, ) = @_; 54 return $self->{_error} 55} 56 57sub failed { 58 my ($self, $error) = @_; 59 60 $self->{_fail} = 1; 61 $self->{_error} = $error; 62 63 if ($self->funcname->set_job_status) { 64 $self->manager->set_job_status($self, 'failed'); 65 } 66 $self->manager->job_failed($self, $error); 67} 68 69sub abort { 70 my ($self, $error) = @_; 71 72 $self->{_abort} = 1; 73 $error ||= 'abort!!'; 74 $self->{_error} = $error; 75 76 if ($self->funcname->set_job_status) { 77 $self->manager->set_job_status($self, 'abort'); 78 } 79 $self->manager->job_failed($self, $error); 80} 81 82sub replace { 83 my ($self, @jobs) = @_; 84 85 my $db = $self->manager->driver_for($self->db); 86 $db->dbh->begin_work; 87 88 for my $job (@jobs) { 89 $self->manager->enqueue(@$job, $self->db); 90 } 91 92 $self->completed; 93 94 $db->dbh->commit; 95} 96 971; 98 99