[Bio] / FigKernelScripts / run_peg_job_worker.pl Repository:
ViewVC logotype

Annotation of /FigKernelScripts/run_peg_job_worker.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (view) (download) (as text)

1 : olson 1.1 #
2 :     # Worker process.
3 :     #
4 :     # Pulls pegs from the table, works on them with the given script, writes results back.
5 :     #
6 :     # usage: run_peg_job_worker tablename
7 :     #
8 :    
9 :     use FIG;
10 :     use strict;
11 :    
12 :     my($table) = @ARGV;
13 :    
14 :     if ($table eq "")
15 :     {
16 :     die "Usage: $0 tablename\n";
17 :     }
18 :    
19 :     $table = "pjs_$table";
20 :    
21 :     my %status_values = (AVAIL => 0,
22 :     TAKEN => 1,
23 :     DONE => 2
24 :     );
25 :    
26 :    
27 :     my $fig = new FIG;
28 :     my $fig_dbh = $fig->db_handle;
29 :     my $dbh = $fig_dbh->{_dbh};
30 :     my $dbms = $fig_dbh->{_dbms};
31 :    
32 :     my $lock_mode;
33 :    
34 :     if ($dbms eq "mysql")
35 :     {
36 :     $lock_mode = "for update";
37 :     # $lock_mode = "lock in share mode";
38 :     }
39 :    
40 :     my $what = 0;
41 :     my $worker = `hostname`;
42 :     chomp($worker);
43 :     $worker .= ":$$";
44 :    
45 :     while (1)
46 :     {
47 :     my $work = get_work($worker);
48 :     my $output = "finished $work $what\n";
49 :     $what++;
50 :     work_done($work, $output);
51 :     }
52 :    
53 :     sub get_work
54 :     {
55 :     my($worker) = @_;
56 :     my $work;
57 :     local $dbh->{AutoCommit} = 0;
58 :     local $dbh->{RaiseError} = 1;
59 :    
60 :     eval {
61 :     my $res = $dbh->selectall_arrayref("select * from $table where status = ? limit 1 $lock_mode", undef,
62 :     $status_values{AVAIL});
63 :     if (not $res or @$res == 0)
64 :     {
65 :     die "No work found\n";
66 :     }
67 :    
68 :     my ($peg, $status, $job_taken, $job_finished, $output) = @{$res->[0]};
69 :     print "Found peg=$peg status=$status job info $job_taken $job_finished\n";
70 :     $dbh->do("update $table set status = ?, worker = ?, job_taken = now() where peg = ?", undef,
71 :     $status_values{TAKEN}, $worker, $peg);
72 :    
73 :     $dbh->commit();
74 :     $work = $peg;
75 :     };
76 :    
77 :     if ($@)
78 :     {
79 :     warn "Error in get_work eval: $@\n";
80 :     $dbh->rollback();
81 :     return;
82 :     }
83 :     else
84 :     {
85 :     return $work;
86 :     }
87 :     }
88 :    
89 :     sub work_done
90 :     {
91 :     my($work, $output) = @_;
92 :    
93 :     local $dbh->{AutoCommit} = 0;
94 :     local $dbh->{RaiseError} = 1;
95 :    
96 :     eval {
97 :     $dbh->do("update $table set status = ?, job_finished = now(), output = ? where peg = ?", undef,
98 :     $status_values{DONE}, $output, $work);
99 :    
100 :     $dbh->commit();
101 :     };
102 :    
103 :     if ($@)
104 :     {
105 :     warn "Error in work_done eval: $@\n";
106 :     $dbh->rollback();
107 :     return;
108 :     }
109 :     else
110 :     {
111 :     return 1;
112 :     }
113 :    
114 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3