[Bio] / MGRASTBackend / mg_compute_figfam_sims.pl Repository:
ViewVC logotype

Annotation of /MGRASTBackend/mg_compute_figfam_sims.pl

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : arodri7 1.1 #
2 :     # Compute one piece of sims work.
3 :     #
4 :     # Usage: rp_compute_sims sims_job_dir
5 :     #
6 :     # SGE_TASK_ID is set to the taskid to be computed.
7 :     #
8 :    
9 :     use GenomeMeta;
10 :     use FIG_Config;
11 :     use strict;
12 :     use File::Basename;
13 : arodri7 1.2 use FortyEightMeta::SimStatusDB;
14 :     use JobStage;
15 :     use SGE;
16 : arodri7 1.1
17 :     my $STAGE = 'compute_figfam_sims';
18 :    
19 :     @ARGV == 2 or die "Usage: $0 job-dir sims-job-dir\n";
20 :    
21 :     my $hostname = `hostname`;
22 :     chomp $hostname;
23 :    
24 :     my $jobdir = shift;
25 :     my $sims_jobdir = shift;
26 :    
27 :     -d $jobdir or die "$0: job dir $jobdir does not exist\n";
28 :     -d $sims_jobdir or die "$0: job dir $jobdir does not exist\n";
29 :    
30 : arodri7 1.2 my $task_num = $ENV{SGE_TASK_ID};
31 : arodri7 1.1
32 :     my $sims_base = basename($sims_jobdir);
33 :    
34 : arodri7 1.2 $task_num =~ /^\d+$/ or die "$0: SGE_TASK_ID not numeric\n";
35 : arodri7 1.1
36 : arodri7 1.2 my $stage = new JobStage('Job48', $STAGE, $jobdir);
37 : arodri7 1.1
38 : arodri7 1.2 my $meta = $stage->meta;
39 : arodri7 1.1 my $job_id = basename($jobdir);
40 :    
41 : arodri7 1.2 my $compute_exe = "$FIG_Config::bin/mg_compute_figfam_sims";
42 :     -x $compute_exe or $stage->fatal("Executable missing: $compute_exe");
43 : arodri7 1.1
44 : arodri7 1.2 if ($task_num == 1 and $meta->get_metadata("status.sims") eq 'queued')
45 :     {
46 :     $meta->set_metadata("status.sims", "in_progress");
47 :     }
48 : arodri7 1.1
49 :     open(TL, "<$sims_jobdir/task.list") or die "$0: cannot open tasklist $sims_jobdir/task.list: $!\n";
50 :    
51 :     my ($fasta, $in, $fam_data, $flags, $out, $err);
52 :    
53 :     while (<TL>)
54 :     {
55 :     chomp;
56 :     my @a = split(/\t/);
57 : arodri7 1.2 if ($a[0] == $task_num)
58 : arodri7 1.1 {
59 :     ($in, $flags, $fam_data, $fasta, $out, $err) = @a[1 .. 6];
60 :     next if (!$err);
61 :     last;
62 :     }
63 :     }
64 :     close(TL);
65 :    
66 : arodri7 1.2
67 : arodri7 1.1 $in or die "Could not find task"; # $task_num";
68 :    
69 : arodri7 1.2 $meta->add_log_entry($0, ['running ', $task_num, $in, $fam_data, $fasta, $flags, $out, $err]);
70 : arodri7 1.1 print "Computing on $in\n";
71 :     my $t1 = time;
72 :    
73 :     #my $blast_args = "$flags -i $in -d $nr -o $out";
74 :    
75 : arodri7 1.2 my $status_db = FortyEightMeta::SimStatusDB->new($job_id);
76 : arodri7 1.1
77 : arodri7 1.2 my $rec = {};
78 :     $rec->{sim_compute_host} = $hostname;
79 :     $rec->{start_time} = $t1;
80 :     $rec->{status} = 'in_progress';
81 : arodri7 1.1
82 : arodri7 1.2 $status_db->set_task($sims_base, $task_num, $rec);
83 :     $rec = $status_db->get_task($sims_base, $task_num);
84 : arodri7 1.1
85 : arodri7 1.2 my $retries_left = $rec->{blast_retries_left};
86 : arodri7 1.1
87 :     #$status_db->disconnect();
88 :    
89 :     open(E, ">$err") or die "Cannot open $err: $!";
90 : arodri7 1.2 open(P, "$FIG_Config::bin/compute_ff_sims $sims_jobdir/.. $fasta $in $out $fam_data 2>&1 |") or die "Cannot run blastall: $!";
91 : arodri7 1.1
92 :     while (<P>)
93 :     {
94 :     print;
95 :     print E $_;
96 :     }
97 :    
98 :     my $rc = close(P);
99 :     my $bang = $!;
100 :     my $ques = $?;
101 :    
102 :     my $t2 = time;
103 :     my $elap = $t2 - $t1;
104 :    
105 :     my $min = int($elap / 60);
106 :     my $sec = $elap % 60;
107 :    
108 :     printf E "%d:%02d $t1 $t2 $elap rc=$rc \$!=$bang \$?=$ques\n", $min, $sec;
109 :     printf "%d:%02d $t1 $t2 $elap rc=$rc \$!=$bang \$?=$ques\n", $min, $sec;
110 :    
111 : arodri7 1.2 $status_db->connect();
112 : arodri7 1.1
113 : arodri7 1.2 #=head
114 : arodri7 1.1 my $rec = {};
115 :    
116 :     $rec->{end_time} = $t2;
117 :     $rec->{elap_time} = $elap;
118 :    
119 :     if (!$rc)
120 :     {
121 :     print "Close err: \$!=$bang \$?=$ques\n";
122 :     my $err;
123 :     if ($bang)
124 :     {
125 :     $err = $bang;
126 : arodri7 1.2 #$meta->add_log_entry($0, ['blastall close error', $!]);
127 : arodri7 1.1 print "Error closing blastall: $err\n";
128 :     print E "Error closing blastall: $err\n";
129 :     }
130 :     else
131 :     {
132 :     $err = $ques;
133 : arodri7 1.2 #$meta->add_log_entry($0, ['blastall nonzero exit', $err]);
134 : arodri7 1.1 print "Nonzero exit status $err from blastall\n";
135 :     print E "Nonzero exit status $err from blastall\n";
136 :     }
137 :    
138 :     #
139 :     # Error retry handling.
140 :     # Determine if we have any retries left. If so, save the run information
141 :     # in $rec->{retry}->[num], decrement the retry count, reset the
142 :     # state of the $rec, and resubmit the task.
143 :     #
144 :    
145 :     if ($retries_left > 0)
146 :     {
147 :     my $sge = new SGE;
148 :    
149 : arodri7 1.2 $status_db->store_record_as_retry($sims_base, $task_num);
150 : arodri7 1.1
151 : arodri7 1.2 my @sge_args;
152 : arodri7 1.1 my $jobname = "m${retries_left}$rec->{abbr}_$job_id";
153 :    
154 :     push(@sge_args, "-N $jobname");
155 :     push(@sge_args, "-v PATH");
156 :     push(@sge_args, "-e $jobdir/sge_output");
157 :     push(@sge_args, "-o $jobdir/sge_output");
158 :     push(@sge_args, "-t $task_num");
159 :     push(@sge_args, "-b yes");
160 :     #push(@sge_args, "-l low");
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 $sims_jobdir");
168 : arodri7 1.2 # print "Would submit '$sge_args' '$compute_exe' '$jobdir' '$path'\n";
169 : arodri7 1.1 };
170 :    
171 :     if ($@)
172 :     {
173 :     $stage->log($meta, "error resubmitting SGE job $compute_exe $jobdir: $@\n");
174 :     $rec->{success} = 0;
175 :     $rec->{exit_code} = $err;
176 :     $rec->{status} = 'error';
177 :     }
178 :     else
179 :     {
180 :     $rec->{status} = 'not_started';
181 :     $rec->{sim_sge_id} = $sge_id;
182 :     my $mlist = $meta->get_metadata("sims.sge_ids");
183 :     if ($mlist)
184 :     {
185 :     if (ref($mlist) eq 'ARRAY')
186 :     {
187 :     push(@$mlist, $sge_id);
188 :     }
189 :     }
190 :     else
191 :     {
192 :     $mlist = [$sge_id];
193 :     }
194 :     $meta->set_metadata("sims.sge_ids");
195 :     #
196 :     # Yes, it's a race. Not too worried.
197 :     #
198 : arodri7 1.2
199 : arodri7 1.1 }
200 :     }
201 :     else
202 :     {
203 :     $rec->{success} = 0;
204 :     $rec->{exit_code} = $err;
205 :     $rec->{status} = 'error';
206 :     }
207 :     }
208 :     else
209 :     {
210 :     $rec->{success} = 1;
211 :     $rec->{exit_code} = $?;
212 :     $rec->{status} = 'complete';
213 :    
214 :     # $meta->add_log_entry($0, ['blastall success', $elap]);
215 :     print E "SUCCESS\n";
216 :     }
217 :     close(E);
218 :    
219 : arodri7 1.2 #=cut
220 :     $status_db->set_task($sims_base, $task_num, $rec);
221 :     undef $status_db;
222 : arodri7 1.1

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3