[Bio] / FortyEightMeta / recover_broken_job.pl Repository:
ViewVC logotype

Annotation of /FortyEightMeta/recover_broken_job.pl

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : olson 1.1 #
2 :     # Find the sim chunks of the job that are bad; construct a new task.list for them
3 :     # and submit an array job to finish.
4 :     #
5 :    
6 :     use strict;
7 :     use FIG;
8 :     use FIG_Config;
9 :     use File::Basename;
10 :     use GenomeMeta;
11 :     use Job48;
12 :     use SGE;
13 :     use Carp;
14 :    
15 :     my $STAGE = "sims";
16 :    
17 :     @ARGV == 1 or die "Usage: $0 job-dir\n";
18 :    
19 :     my $jobdir = shift;
20 :    
21 : olson 1.3 if ($jobdir =~ /^\d+$/)
22 :     {
23 :     $jobdir = "/vol/metagenome-48-hour/Jobs.prod/$jobdir";
24 :     }
25 : redwards 1.5 if ($jobdir eq ".")
26 :     {
27 :     $jobdir = `pwd`;
28 :     chomp $jobdir;
29 :     }
30 : olson 1.3
31 : olson 1.1 -d $jobdir or die "$0: job dir $jobdir does not exist\n";
32 :    
33 :     my $job_id = basename($jobdir);
34 :     my $job = new Job48($jobdir);
35 :    
36 :     my $meta = $job->meta;
37 :    
38 :     print "Running job! $jobdir\n";
39 :    
40 : redwards 1.5
41 : olson 1.1 $job->meta->set_metadata("status.$STAGE", "in_progress");
42 : redwards 1.5 $job->meta->set_metadata("recover_broken_job", ("started at ".localtime));
43 :    
44 : olson 1.1
45 :     my $sge = new SGE;
46 :    
47 :     #
48 :     # Find needed executables
49 :     #
50 :    
51 :     my $compute_exe = "$FIG_Config::bin/mg_compute_sims";
52 :     -x $compute_exe or &fatal("Executable missing: $compute_exe");
53 :    
54 :     my $rdb_postproc_exe = "$FIG_Config::bin/mg_postproc_taxa_sims";
55 :     -x $rdb_postproc_exe or &fatal("Executable missing: $rdb_postproc_exe");
56 :    
57 :     my $sims_done_exe = "$FIG_Config::bin/mg_sims_done";
58 :     -x $sims_done_exe or &fatal("Executable missing: $sims_done_exe");
59 :    
60 :     #
61 :     # Set of sims jobs to run.
62 :     #
63 :    
64 :     my $opts = "-m 8 -e 0.1";
65 :     my @jobs = (["sims.gg", 10000, "/vol/metagenome-48-hour/Data/greengenes.fasta", "blastn", $opts],
66 :     ["sims.lsu", 450000, "/vol/metagenome-48-hour/Data/lsu.fa", "blastn", $opts],
67 :     ["sims.ssu", 45000, "/vol/metagenome-48-hour/Data/ssu.fa", "blastn", $opts],
68 :     ["sims.16s", 10000, "/vol/metagenome-48-hour/Data/16s.fa", "blastn", $opts],
69 :     # ["sims.seed", 500, "/home/redwards/databases/SEED_2006_07_01", "blastx", $opts],
70 :     ["sims.seed", 500, "/scratch/metagenome-48-hour/Data/SEED_2006_07_01", "blastx", $opts],
71 :     );
72 :    
73 :     my $proc = "$jobdir/proc";
74 :     chdir($proc) or &fatal("cannot chdir $proc: $!");
75 :    
76 :     my $fasta = $meta->get_metadata("preprocess.fasta_file");
77 :     ($fasta and -f $fasta) or &fatal("fasta not found: '$fasta'");
78 :    
79 :     my @sge_ids;
80 :     my @short_ids;
81 :    
82 :     for my $simj (@jobs)
83 :     {
84 :     my($dir, $nseqs, $nr, $blastp, $opts) = @$simj;
85 :     my $path = "$proc/$dir";
86 :     -d $path or &fatal("Sims directory $path does not exist\n");
87 :    
88 :     my $repair = "$path/sims.repair";
89 :     -d $repair or mkdir($repair) or die "cannot mkdir $repair: $!";
90 :    
91 :     my $repair_err = "$path/sims.repair/err";
92 :     -d $repair_err or mkdir($repair_err) or die "cannot mkdir $repair_err: $!";
93 :    
94 :     open(T, "<$path/task.list") or die "Cannot open $path/task.list: $!";
95 :     open(NT, ">$repair/task.list") or die "Cannot open $repair/task.list: $!";
96 :    
97 :     my $newtask = 0;
98 :     while (my $tline = <T>)
99 :     {
100 :     chomp $tline;
101 :     my($task, $in, $nr, $flags, $out, $err) = split(/\t/, $tline);
102 :    
103 :     my $fatal;
104 :     my $success;
105 : dsouza 1.4
106 :     if ( -e $err )
107 : olson 1.1 {
108 : dsouza 1.4 open(E, "<$err") or die "cannot open err file $err: $!";
109 :    
110 :     while (<E>)
111 : olson 1.1 {
112 : dsouza 1.4 if (/FATAL/)
113 :     {
114 :     $fatal++;
115 :     last;
116 :     }
117 :     elsif (/SUCCESS/)
118 :     {
119 :     $success++;
120 :     }
121 : olson 1.1 }
122 : dsouza 1.4 close(E);
123 :     }
124 :     else
125 :     {
126 :     $fatal++;
127 : olson 1.1 }
128 : dsouza 1.4
129 : olson 1.1 if ($fatal or !$success)
130 :     {
131 :     print NT join("\t", $newtask + 1, $in, $nr, $flags, $out, "$repair_err/err.$task"), "\n";
132 :     $newtask++;
133 :     }
134 :     }
135 :    
136 :     close(NT);
137 :    
138 : olson 1.3 if ($newtask > 0)
139 : olson 1.1 {
140 :     print "Have $newtask new tasks in $repair/task.list\n";
141 :     #
142 :     # And submit.
143 :     #
144 :    
145 :     my @sge_args;
146 :    
147 :     my $n = $dir;
148 :     $n =~ s/^sims\.//;
149 :     $n = "m${n}$job_id";
150 :    
151 :     push(@sge_args, "-N $n");
152 :     push(@sge_args, "-v PATH");
153 :     push(@sge_args, "-e $jobdir/sge_output");
154 :     push(@sge_args, "-o $jobdir/sge_output");
155 :     push(@sge_args, "-t 1-$newtask");
156 :     push(@sge_args, "-b yes");
157 :     #
158 :     # repair metagenome 48hr jobs get high priority
159 :     #
160 :     push(@sge_args, "-l high");
161 :    
162 :     my $sge_args = join(" ", @sge_args);
163 :    
164 :     my $sge_id;
165 :    
166 :     eval {
167 :     $sge_id = $sge->submit_job($meta, $sge_args, "$compute_exe $jobdir $repair");
168 :     };
169 :    
170 :     if ($@)
171 :     {
172 :     &fatal($meta, "error starting SGE job $compute_exe $jobdir: $@\n");
173 :     }
174 :    
175 :     push(@sge_ids, $sge_id);
176 :     }
177 :    
178 :     }
179 :    
180 :     #
181 :     # Schedule a postprocessing job that just marks the sims stage complete.
182 :     #
183 :    
184 :     my @sge_args;
185 :    
186 :     push(@sge_args, "-N sd$job_id");
187 :     push(@sge_args, "-v PATH");
188 :     push(@sge_args, "-e $jobdir/sge_output");
189 :     push(@sge_args, "-o $jobdir/sge_output");
190 :     push(@sge_args, "-b yes");
191 :     push(@sge_args, "-l high");
192 :     #
193 :     # Hold on the sims jobs.
194 :     #
195 :     push(@sge_args, "-hold_jid " . join(",", @sge_ids));
196 :    
197 :     my $sge_args = join(" ", @sge_args);
198 :    
199 :     my $sge_id;
200 :    
201 :     eval {
202 :     $sge_id = $sge->submit_job($meta, $sge_args, "$sims_done_exe $jobdir");
203 :     };
204 :    
205 :     if ($@)
206 :     {
207 :     &fatal($meta, "error starting SGE job $sims_done_exe $jobdir: $@\n");
208 :     }
209 :    
210 :     push(@sge_ids, $sge_id);
211 :    
212 :     $meta->set_metadata("$STAGE.sge_ids", \@sge_ids);
213 :    
214 :    
215 :     sub run
216 :     {
217 :     my(@cmd) = @_;
218 :    
219 :     print "Run @cmd\n";
220 :     my $rc = system(@cmd);
221 :     if ($rc != 0)
222 :     {
223 :     &fatal("Failed with rc=$rc: @cmd");
224 :     }
225 :     }
226 :    
227 :     sub fatal
228 :     {
229 :     my($msg) = @_;
230 :    
231 :     $meta->add_log_entry($0, ['fatal error', $msg]);
232 :     $meta->set_metadata("status.$STAGE", "error");
233 :    
234 :     croak "$0: $msg";
235 :     }
236 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3