File Coverage

blib/lib/Proc/JobQueue/DependencyJob.pm
Criterion Covered Total %
statement 15 56 26.7
branch 0 18 0.0
condition 0 5 0.0
subroutine 5 11 45.4
pod 3 6 50.0
total 23 96 23.9


line stmt bran cond sub pod time code
1              
2             package Proc::JobQueue::DependencyJob;
3              
4 2     2   1351 use strict;
  2         5  
  2         68  
5 2     2   10 use warnings;
  2         3  
  2         56  
6 2     2   11 use Scalar::Util qw(blessed);
  2         6  
  2         97  
7 2     2   13 use Callback;
  2         4  
  2         80  
8             require Proc::JobQueue::Job;
9 2     2   11 use Carp qw(confess);
  2         4  
  2         1525  
10              
11             our @ISA = qw(Proc::JobQueue::Job);
12              
13             sub new
14             {
15 0     0 0   my ($pkg, $dependency_graph, $func, %params) = @_;
16 0   0       $params{args} ||= [];
17              
18 0           my $cb = (blessed($func) && $func->isa('Callback'))
19             ? $func
20 0 0 0       : Callback->new($func, @{$params{args}});
21              
22 0           delete $params{args};
23              
24 0           my $job = $pkg->SUPER::new(
25             dependency_graph => $dependency_graph,
26             dep_cb => $cb,
27             started => 0,
28             runnable => 0,
29             %params,
30             );
31 0           $dependency_graph->add($job);
32 0           return $job;
33             }
34              
35             sub startup
36             {
37 0     0 1   my ($job) = @_;
38              
39 0           my $host = $job->{host};
40 0           my $jobnum = $job->{jobnum};
41 0           my $job_queue = $job->{queue};
42              
43 0           my $cb = $job->{dep_cb};
44 0           $job->{dep_cb} = undef;
45 0           my ($code, $f, @a) = $cb->call($job);
46 0 0         if ($code eq 'job-done,dep-keep') {
    0          
    0          
    0          
47 0           $job->{dep_cb} = new Callback ($f, @a);
48 0           $job_queue->jobdone($job);
49             } elsif ($code eq 'all-done') {
50 0           $job->finished(0);
51             } elsif ($code eq 'job-keep,dep-done') {
52 0           $job->{dependency_graph}->remove_dependency($job);
53 0           undef $job->{dependency_graph};
54             } elsif ($code eq 'all-keep') {
55             # okay
56             } else {
57 0           die "unknown code '$code' from $job->{desc}";
58             }
59             }
60              
61             sub job_part_finished
62             {
63 0     0 0   my ($job, $do_startmore) = @_;
64 0           my $queue = $job->{queue};
65 0 0         return unless $queue;
66 0           $job->{queue} = undef;
67 0           $queue->job_part_finished($job, $do_startmore);
68             }
69              
70             sub success
71             {
72 0     0 0   my ($job) = @_;
73 0 0         if ($job->{dependency_graph}) {
74 0           $job->{dependency_graph}->remove_dependency($job);
75 0           undef $job->{dependency_graph};
76             }
77 0           $job->SUPER::success();
78             }
79              
80             sub failed
81             {
82 0     0 1   my ($job, @exit_code) = @_;
83 0 0         if ($job->{dependency_graph}) {
84 0           $job->{dependency_graph}->stuck_dependency($job);
85 0           undef $job->{dependency_graph};
86             }
87 0           print STDERR "Job $job->{desc} failed, all dependent tasks cancelled\n";
88             }
89              
90             sub failure
91             {
92 0     0 1   my ($job, @exit_code) = @_;
93 0 0         if ($exit_code[0]) {
94 0           $job->finished(@exit_code);
95             } else {
96 0           $job->finished('FAILED', @exit_code);
97             }
98             }
99              
100             1;
101              
102             __END__