[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.6 - (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 : redwards 1.6 my @jobs = (["sims.gg", 10000,"$FIG_Config::mgrast_data/greengenes.fasta", "blastn", $opts],
66 :     ["sims.silva_ssu", 450000, "$FIG_Config::mgrast_data/silva_94_ssu.fasta", "blastn", $opts],
67 :     ["sims.silva_lsu", 450000, "$FIG_Config::mgrast_data/silva_94_lsu.fasta", "blastn", $opts],
68 :     # ["sims.lsu", 450000, "/vol/metagenome-48-hour/Data/lsu.fa", "blastn", $opts],
69 :     # ["sims.ssu", 45000, "/vol/metagenome-48-hour/Data/ssu.fa", "blastn", $opts],
70 :     ["sims.16s", 10000, "$FIG_Config::mgrast_data/16s.fa", "blastn", $opts],
71 : olson 1.1 # ["sims.seed", 500, "/home/redwards/databases/SEED_2006_07_01", "blastx", $opts],
72 : redwards 1.6 # ["sims.seed", 501, "/scratch/metagenome-48-hour/Data/SEED_2006_07_01", "blastx", $opts],
73 :     ["sims.seed", 501, "/vol/mg-rast-test/Data/db/seed/018/nr", "blastx", $opts],
74 :     #["sims.seed", 500, "/scratch/metagenome-48-hour/Data/SEED_2006_07_01", "blastx", $opts],
75 : olson 1.1 );
76 :    
77 :     my $proc = "$jobdir/proc";
78 :     chdir($proc) or &fatal("cannot chdir $proc: $!");
79 :    
80 :     my $fasta = $meta->get_metadata("preprocess.fasta_file");
81 :     ($fasta and -f $fasta) or &fatal("fasta not found: '$fasta'");
82 :    
83 :     my @sge_ids;
84 :     my @short_ids;
85 :    
86 :     for my $simj (@jobs)
87 :     {
88 :     my($dir, $nseqs, $nr, $blastp, $opts) = @$simj;
89 :     my $path = "$proc/$dir";
90 :     -d $path or &fatal("Sims directory $path does not exist\n");
91 :    
92 :     my $repair = "$path/sims.repair";
93 :     -d $repair or mkdir($repair) or die "cannot mkdir $repair: $!";
94 :    
95 :     my $repair_err = "$path/sims.repair/err";
96 :     -d $repair_err or mkdir($repair_err) or die "cannot mkdir $repair_err: $!";
97 :    
98 :     open(T, "<$path/task.list") or die "Cannot open $path/task.list: $!";
99 :     open(NT, ">$repair/task.list") or die "Cannot open $repair/task.list: $!";
100 :    
101 :     my $newtask = 0;
102 :     while (my $tline = <T>)
103 :     {
104 :     chomp $tline;
105 :     my($task, $in, $nr, $flags, $out, $err) = split(/\t/, $tline);
106 :    
107 :     my $fatal;
108 :     my $success;
109 : dsouza 1.4
110 :     if ( -e $err )
111 : olson 1.1 {
112 : dsouza 1.4 open(E, "<$err") or die "cannot open err file $err: $!";
113 :    
114 :     while (<E>)
115 : olson 1.1 {
116 : dsouza 1.4 if (/FATAL/)
117 :     {
118 :     $fatal++;
119 :     last;
120 :     }
121 :     elsif (/SUCCESS/)
122 :     {
123 :     $success++;
124 :     }
125 : olson 1.1 }
126 : dsouza 1.4 close(E);
127 :     }
128 :     else
129 :     {
130 :     $fatal++;
131 : olson 1.1 }
132 : dsouza 1.4
133 : olson 1.1 if ($fatal or !$success)
134 :     {
135 :     print NT join("\t", $newtask + 1, $in, $nr, $flags, $out, "$repair_err/err.$task"), "\n";
136 :     $newtask++;
137 :     }
138 :     }
139 :    
140 :     close(NT);
141 :    
142 : olson 1.3 if ($newtask > 0)
143 : olson 1.1 {
144 :     print "Have $newtask new tasks in $repair/task.list\n";
145 :     #
146 :     # And submit.
147 :     #
148 :    
149 :     my @sge_args;
150 :    
151 :     my $n = $dir;
152 :     $n =~ s/^sims\.//;
153 :     $n = "m${n}$job_id";
154 :    
155 :     push(@sge_args, "-N $n");
156 :     push(@sge_args, "-v PATH");
157 :     push(@sge_args, "-e $jobdir/sge_output");
158 :     push(@sge_args, "-o $jobdir/sge_output");
159 :     push(@sge_args, "-t 1-$newtask");
160 :     push(@sge_args, "-b yes");
161 :     #
162 :     # repair metagenome 48hr jobs get high priority
163 :     #
164 :     push(@sge_args, "-l high");
165 :    
166 :     my $sge_args = join(" ", @sge_args);
167 :    
168 :     my $sge_id;
169 :    
170 :     eval {
171 :     $sge_id = $sge->submit_job($meta, $sge_args, "$compute_exe $jobdir $repair");
172 :     };
173 :    
174 :     if ($@)
175 :     {
176 :     &fatal($meta, "error starting SGE job $compute_exe $jobdir: $@\n");
177 :     }
178 :    
179 :     push(@sge_ids, $sge_id);
180 :     }
181 :    
182 :     }
183 :    
184 :     #
185 :     # Schedule a postprocessing job that just marks the sims stage complete.
186 :     #
187 :    
188 :     my @sge_args;
189 :    
190 :     push(@sge_args, "-N sd$job_id");
191 :     push(@sge_args, "-v PATH");
192 :     push(@sge_args, "-e $jobdir/sge_output");
193 :     push(@sge_args, "-o $jobdir/sge_output");
194 :     push(@sge_args, "-b yes");
195 :     push(@sge_args, "-l high");
196 :     #
197 :     # Hold on the sims jobs.
198 :     #
199 :     push(@sge_args, "-hold_jid " . join(",", @sge_ids));
200 :    
201 :     my $sge_args = join(" ", @sge_args);
202 :    
203 :     my $sge_id;
204 :    
205 :     eval {
206 :     $sge_id = $sge->submit_job($meta, $sge_args, "$sims_done_exe $jobdir");
207 :     };
208 :    
209 :     if ($@)
210 :     {
211 :     &fatal($meta, "error starting SGE job $sims_done_exe $jobdir: $@\n");
212 :     }
213 :    
214 :     push(@sge_ids, $sge_id);
215 :    
216 :     $meta->set_metadata("$STAGE.sge_ids", \@sge_ids);
217 :    
218 :    
219 :     sub run
220 :     {
221 :     my(@cmd) = @_;
222 :    
223 :     print "Run @cmd\n";
224 :     my $rc = system(@cmd);
225 :     if ($rc != 0)
226 :     {
227 :     &fatal("Failed with rc=$rc: @cmd");
228 :     }
229 :     }
230 :    
231 :     sub fatal
232 :     {
233 :     my($msg) = @_;
234 :    
235 :     $meta->add_log_entry($0, ['fatal error', $msg]);
236 :     $meta->set_metadata("status.$STAGE", "error");
237 :    
238 :     croak "$0: $msg";
239 :     }
240 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3