Commit 87edbccd authored by Leo Gordon's avatar Leo Gordon
Browse files

auto-generated docs for version/2.3

parent 723ef48a
......@@ -212,6 +212,7 @@ Functions</h2></td></tr>
<div class="line"> my $force = undef;</div>
<div class="line"> my $keep_alive = 0; # ==1 means run even when there is nothing to <span class="keywordflow">do</span></div>
<div class="line"> my $check_for_dead = 0;</div>
<div class="line"> my $bury_unkwn_workers = 0;</div>
<div class="line"> my $all_dead = 0;</div>
<div class="line"> my $balance_semaphores = 0;</div>
<div class="line"> my $job_id_for_output = 0;</div>
......@@ -280,6 +281,7 @@ Functions</h2></td></tr>
<div class="line"><span class="stringliteral"> &#39;</span>v|versions!<span class="stringliteral">&#39; =&gt; \$report_versions,</span></div>
<div class="line"><span class="stringliteral"> &#39;</span>sync!<span class="stringliteral">&#39; =&gt; \$sync,</span></div>
<div class="line"><span class="stringliteral"> &#39;</span>dead!<span class="stringliteral">&#39; =&gt; \$check_for_dead,</span></div>
<div class="line"><span class="stringliteral"> &#39;</span>unkwn!<span class="stringliteral">&#39; =&gt; \$bury_unkwn_workers,</span></div>
<div class="line"><span class="stringliteral"> &#39;</span>killworker=i<span class="stringliteral">&#39; =&gt; \$kill_worker_id,</span></div>
<div class="line"><span class="stringliteral"> &#39;</span>alldead!<span class="stringliteral">&#39; =&gt; \$all_dead,</span></div>
<div class="line"><span class="stringliteral"> &#39;</span>balance_semaphores<span class="stringliteral">&#39;=&gt; \$balance_semaphores,</span></div>
......@@ -445,6 +447,7 @@ Functions</h2></td></tr>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span>($all_dead) { $queen-&gt;register_all_workers_dead(); }</div>
<div class="line"> <span class="keywordflow">if</span>($check_for_dead) { $queen-&gt;check_for_dead_workers($valley, 1); }</div>
<div class="line"> <span class="keywordflow">if</span>($bury_unkwn_workers) { $queen-&gt;check_for_dead_workers($valley, 1, 1); }</div>
<div class="line"> <span class="keywordflow">if</span>($balance_semaphores) { $self-&gt;{<span class="stringliteral">&#39;dba&#39;</span>}-&gt;get_AnalysisJobAdaptor-&gt;balance_semaphores( $list_of_analyses ); }</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span> ($max_loops) { # positive $max_loop means limited, negative means unlimited</div>
......@@ -545,7 +548,7 @@ Functions</h2></td></tr>
<div class="line"> $dba = $dbas-&gt;[0];</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> $dbc = $dba-&gt;dbc();</div>
<div class="line"> $dbc = bless $dba-&gt;dbc, <span class="stringliteral">&#39;Bio::EnsEMBL::Hive::DBSQL::DBConnection&#39;</span>;</div>
<div class="line"></div>
<div class="line"> } elsif($url) {</div>
<div class="line"> $dbc = <a class="code" href="class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_d_b_s_q_l_1_1_d_b_connection.html">Bio::EnsEMBL::Hive::DBSQL::DBConnection</a>-&gt;<a class="code" href="class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_d_b_s_q_l_1_1_d_b_connection.html#a7931542229862db93f899aef0eb983f0">new</a>( -url =&gt; $url );</div>
......
......@@ -347,7 +347,9 @@ Description</h1>
<div class="line"></div>
<div class="line"> my $collection = <a class="code" href="class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_dataflow_rule.html">Bio::EnsEMBL::Hive::DataflowRule</a>-&gt;<a class="code" href="class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_cacheable.html#a1c4430cb41931838b7bcf32ddc0e76a6">collection</a>();</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">return</span> $collection-&gt;find_all_by(<span class="stringliteral">&#39;from_analysis&#39;</span>, $self);</div>
<div class="line"> <span class="keywordflow">return</span> $collection</div>
<div class="line"> ? $collection-&gt;find_all_by(<span class="stringliteral">&#39;from_analysis&#39;</span>, $self)</div>
<div class="line"> : $self-&gt;adaptor-&gt;db-&gt;get_DataflowRuleAdaptor-&gt;fetch_all_by_from_analysis_id( $self-&gt;dbID );</div>
<div class="line">}</div>
</div><!-- fragment --> </div>
</div>
......
......@@ -291,7 +291,7 @@ Description</h1>
<div class="line"> FROM job funnel</div>
<div class="line"> LEFT JOIN job fan ON (funnel.job_id=fan.semaphored_job_id)</div>
<div class="line"> WHERE $analysis_filter</div>
<div class="line"> funnel.status=<span class="stringliteral">&#39;SEMAPHORED&#39;</span></div>
<div class="line"> funnel.status in (<span class="stringliteral">&#39;SEMAPHORED&#39;</span>, <span class="stringliteral">&#39;READY&#39;</span>)</div>
<div class="line"> GROUP BY funnel.job_id</div>
<div class="line"> ) AS <span class="keyword">internal</span> WHERE was&lt;&gt;should OR should=0</div>
<div class="line"> };</div>
......@@ -301,7 +301,7 @@ Description</h1>
<div class="line"> .( ($self-&gt;dbc-&gt;driver eq <span class="stringliteral">&#39;pgsql&#39;</span>)</div>
<div class="line"> ? <span class="stringliteral">&quot;status = CAST(CASE WHEN semaphore_count&gt;0 THEN &#39;SEMAPHORED&#39; ELSE &#39;READY&#39; END AS jw_status) &quot;</span></div>
<div class="line"> : <span class="stringliteral">&quot;status = CASE WHEN semaphore_count&gt;0 THEN &#39;SEMAPHORED&#39; ELSE &#39;READY&#39; END &quot;</span></div>
<div class="line"> ).<span class="stringliteral">&quot; WHERE job_id=? AND status=&#39;SEMAPHORED&#39;&quot;</span>;</div>
<div class="line"> ).<span class="stringliteral">&quot; WHERE job_id=? AND status IN (&#39;SEMAPHORED&#39;, &#39;READY&#39;)&quot;</span>;</div>
<div class="line"></div>
<div class="line"> my $find_sth = $self-&gt;prepare($find_sql);</div>
<div class="line"> my $update_sth = $self-&gt;prepare($update_sql);</div>
......@@ -901,6 +901,11 @@ Description</h1>
<div class="line"> WHERE job_id=$job_id</div>
<div class="line"> AND status in (<span class="stringliteral">&#39;CLAIMED&#39;</span>,<span class="stringliteral">&#39;PRE_CLEANUP&#39;</span>,<span class="stringliteral">&#39;FETCH_INPUT&#39;</span>,<span class="stringliteral">&#39;RUN&#39;</span>,<span class="stringliteral">&#39;WRITE_OUTPUT&#39;</span>,<span class="stringliteral">&#39;POST_CLEANUP&#39;</span>)</div>
<div class="line"> } );</div>
<div class="line"></div>
<div class="line"><span class="preprocessor"> # FIXME: move the decision making completely to the API side and so avoid the potential race condition.</span></div>
<div class="line"><span class="preprocessor"></span> my $job = $self-&gt;fetch_by_dbID( $job_id );</div>
<div class="line"></div>
<div class="line"> $self-&gt;db-&gt;get_AnalysisStatsAdaptor-&gt;increment_a_counter( ($job-&gt;status eq <span class="stringliteral">&#39;FAILED&#39;</span>) ? <span class="stringliteral">&#39;failed_job_count&#39;</span> : <span class="stringliteral">&#39;ready_job_count&#39;</span>, 1, $job-&gt;analysis_id );</div>
<div class="line">}</div>
</div><!-- fragment --> </div>
</div>
......
......@@ -358,8 +358,11 @@ Description</h1>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span>($driver eq <span class="stringliteral">&#39;sqlite&#39;</span>) {</div>
<div class="line"> <span class="keywordflow">return</span> [<span class="stringliteral">&#39;rm&#39;</span>, <span class="stringliteral">&#39;-f&#39;</span>, $dbname];</div>
<div class="line"> } elsif(!$2) {</div>
<div class="line"> $sqlcmd = <span class="stringliteral">&quot;$1 $dbname&quot;</span>;</div>
<div class="line"> } <span class="keywordflow">else</span> {</div>
<div class="line"> <span class="keywordflow">if</span> (not $dbname) {</div>
<div class="line"> die <span class="stringliteral">&quot;&#39;DROP DATABASE&#39; needs a database name\n&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"> $sqlcmd = <span class="stringliteral">&quot;$1 $dbname&quot;</span> unless $2;</div>
<div class="line"> $dbname = <span class="stringliteral">&#39;&#39;</span>;</div>
<div class="line"> }</div>
<div class="line"> } elsif($sqlcmd =~ /(CREATE\s+DATABASE\s*?)(?:\s+(\w+))?/i ) {</div>
......@@ -367,12 +370,15 @@ Description</h1>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span>($driver eq <span class="stringliteral">&#39;sqlite&#39;</span>) {</div>
<div class="line"> <span class="keywordflow">return</span> [<span class="stringliteral">&#39;touch&#39;</span>, $dbname];</div>
<div class="line"> } elsif(!$2) {</div>
<div class="line"> } <span class="keywordflow">else</span> {</div>
<div class="line"> <span class="keywordflow">if</span> (not $dbname) {</div>
<div class="line"> die <span class="stringliteral">&quot;&#39;CREATE DATABASE&#39; needs a database name\n&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"> my %limits = ( <span class="stringliteral">&#39;mysql&#39;</span> =&gt; 64, <span class="stringliteral">&#39;pgsql&#39;</span> =&gt; 63 );</div>
<div class="line"> <span class="keywordflow">if</span> (length($dbname) &gt; $limits{$driver}) {</div>
<div class="line"> die <span class="stringliteral">&quot;Database name &#39;$dbname&#39; is too long (&gt; $limits{$driver}). Cannot create the database\n&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"> $sqlcmd = <span class="stringliteral">&quot;$1 $dbname&quot;</span>;</div>
<div class="line"> $sqlcmd = <span class="stringliteral">&quot;$1 $dbname&quot;</span> unless $2;</div>
<div class="line"> $dbname = <span class="stringliteral">&#39;&#39;</span>;</div>
<div class="line"> }</div>
<div class="line"> }</div>
......
......@@ -331,7 +331,8 @@ Description</h1>
<div class="fragment"><div class="line">sub <a class="code" href="class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_d_b_s_q_l_1_1_role_adaptor.html#ad396d2099ffc0e58eca66a184fa4c3e6">fetch_all_finished_roles_with_unfinished_jobs</a> {</div>
<div class="line"> my $self = shift;</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">return</span> $self-&gt;fetch_all( <span class="stringliteral">&quot;JOIN job USING(role_id) WHERE when_finished IS NOT NULL AND status NOT IN (&#39;DONE&#39;, &#39;READY&#39;, &#39;FAILED&#39;, &#39;PASSED_ON&#39;) GROUP BY role_id&quot;</span> );</div>
<div class="line"><span class="preprocessor"> # the list should contain all status&#39;es that are not &quot;in progress&quot;:</span></div>
<div class="line"><span class="preprocessor"></span> <span class="keywordflow">return</span> $self-&gt;fetch_all( <span class="stringliteral">&quot;JOIN job USING(role_id) WHERE when_finished IS NOT NULL AND status NOT IN (&#39;DONE&#39;, &#39;READY&#39;, &#39;FAILED&#39;, &#39;PASSED_ON&#39;, &#39;SEMAPHORED&#39;) GROUP BY role_id&quot;</span> );</div>
<div class="line">}</div>
</div><!-- fragment --> </div>
</div>
......
......@@ -350,7 +350,7 @@ Description</h1>
<div id='codesection-kill_worker-summary' class='dyncontent' style='display:block;font-size:small;'>click to view</div>
<div id='codesection-kill_worker-content' class='dyncontent' style='display: none;'>
<div class="fragment"><div class="line">sub <a class="code" href="class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_meadow_1_1_l_o_c_a_l.html#a2b3d6f77f19e0a635a444d551715704e">kill_worker</a> {</div>
<div class="line"> my $worker = pop @_;</div>
<div class="line"> my ($self, $worker, $fast) = @_;</div>
<div class="line"></div>
<div class="line"> my $cmd = <span class="stringliteral">&#39;kill -9 &#39;</span>.$worker-&gt;process_id();</div>
<div class="line"> system($cmd);</div>
......
......@@ -482,9 +482,11 @@ Description</h1>
<div id='codesection-kill_worker-summary' class='dyncontent' style='display:block;font-size:small;'>click to view</div>
<div id='codesection-kill_worker-content' class='dyncontent' style='display: none;'>
<div class="fragment"><div class="line">sub <a class="code" href="class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_meadow_1_1_l_s_f.html#accdb28c3a317e4ecc45368b83a426a0c">kill_worker</a> {</div>
<div class="line"> my $worker = pop @_;</div>
<div class="line"> my ($self, $worker, $fast) = @_;</div>
<div class="line"></div>
<div class="line"> my $cmd = <span class="stringliteral">&#39;bkill &#39;</span>.$worker-&gt;process_id();</div>
<div class="line"> my $fast_flag = $fast ? <span class="stringliteral">&#39;-r &#39;</span> : <span class="stringliteral">&#39;&#39;</span>;</div>
<div class="line"></div>
<div class="line"> my $cmd = <span class="stringliteral">&quot;bkill $fast_flag&quot;</span>.$worker-&gt;process_id();</div>
<div class="line"></div>
<div class="line"><span class="preprocessor"># warn &quot;LSF::kill_worker() running cmd:\n\t$cmd\n&quot;;</span></div>
<div class="line"><span class="preprocessor"></span></div>
......@@ -549,9 +551,10 @@ Description</h1>
<div class="line"> warn <span class="stringliteral">&quot;LSF::parse_report_source_line( \&quot;$bacct_source_line\&quot; )\n&quot;</span>;</div>
<div class="line"></div>
<div class="line"> my %status_2_cod = (</div>
<div class="line"> <span class="stringliteral">&#39;TERM_MEMLIMIT&#39;</span> =&gt; <span class="stringliteral">&#39;MEMLIMIT&#39;</span>,</div>
<div class="line"> <span class="stringliteral">&#39;TERM_RUNLIMIT&#39;</span> =&gt; <span class="stringliteral">&#39;RUNLIMIT&#39;</span>,</div>
<div class="line"> <span class="stringliteral">&#39;TERM_OWNER&#39;</span> =&gt; <span class="stringliteral">&#39;KILLED_BY_USER&#39;</span>,</div>
<div class="line"> <span class="stringliteral">&#39;TERM_MEMLIMIT&#39;</span> =&gt; <span class="stringliteral">&#39;MEMLIMIT&#39;</span>,</div>
<div class="line"> <span class="stringliteral">&#39;TERM_RUNLIMIT&#39;</span> =&gt; <span class="stringliteral">&#39;RUNLIMIT&#39;</span>,</div>
<div class="line"> <span class="stringliteral">&#39;TERM_OWNER&#39;</span> =&gt; <span class="stringliteral">&#39;KILLED_BY_USER&#39;</span>, # bkill (wait until it dies)</div>
<div class="line"> <span class="stringliteral">&#39;TERM_FORCE_OWNER&#39;</span> =&gt; <span class="stringliteral">&#39;KILLED_BY_USER&#39;</span>, # bkill -r (quick <span class="keyword">remove</span>)</div>
<div class="line"> );</div>
<div class="line"></div>
<div class="line"> my %units_2_megs = (</div>
......
......@@ -297,7 +297,7 @@ Description</h1>
<div id='codesection-check_for_dead_workers-summary' class='dyncontent' style='display:block;font-size:small;'>click to view</div>
<div id='codesection-check_for_dead_workers-content' class='dyncontent' style='display: none;'>
<div class="fragment"><div class="line">sub <a class="code" href="class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_queen.html#a020be70f3da4eca961fef537e68daca6">check_for_dead_workers</a> { # scans the whole Valley <span class="keywordflow">for</span> lost Workers (but ignores unreachable ones)</div>
<div class="line"> my ($self, $valley, $check_buried_in_haste) = @_;</div>
<div class="line"> my ($self, $valley, $check_buried_in_haste, $bury_unkwn_workers) = @_;</div>
<div class="line"></div>
<div class="line"> my $last_few_seconds = 5; # FIXME: It is probably a good idea to expose <span class="keyword">this</span> parameter <span class="keywordflow">for</span> easier tuning.</div>
<div class="line"></div>
......@@ -336,80 +336,95 @@ Description</h1>
<div class="line"></div>
<div class="line"> my $meadow_type = $worker-&gt;meadow_type;</div>
<div class="line"> my $process_id = $worker-&gt;process_id;</div>
<div class="line"> <span class="keywordflow">if</span>(my $status = $pid_to_worker_status-&gt;{$process_id}) { # can be RUN|PEND|xSUSP</div>
<div class="line"> $meadow_status_counts{$meadow_signature}{$status}++;</div>
<div class="line"></div>
<div class="line"><span class="preprocessor"> # only prepare once at most:</span></div>
<div class="line"><span class="preprocessor"></span> $update_when_seen_sth ||= $self-&gt;prepare( $update_when_seen_sql );</div>
<div class="line"></div>
<div class="line"> $update_when_seen_sth-&gt;execute( $worker-&gt;dbID );</div>
<div class="line"> } <span class="keywordflow">else</span> {</div>
<div class="line"> $meadow_status_counts{$meadow_signature}{<span class="stringliteral">&#39;LOST&#39;</span>}++;</div>
<div class="line"></div>
<div class="line"> $mt_and_pid_to_lost_worker{$meadow_type}{$process_id} = $worker;</div>
<div class="line"> }</div>
<div class="line"> } <span class="keywordflow">else</span> {</div>
<div class="line"> $meadow_status_counts{$meadow_signature}{<span class="stringliteral">&#39;UNREACHABLE&#39;</span>}++; # Worker is unreachable from <span class="keyword">this</span> Valley</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> $update_when_seen_sth-&gt;finish() <span class="keywordflow">if</span> $update_when_seen_sth;</div>
<div class="line"></div>
<div class="line"><span class="preprocessor"> # print a quick summary report:</span></div>
<div class="line"><span class="preprocessor"></span> <span class="keywordflow">while</span>(my ($meadow_signature, $status_count) = each %meadow_status_counts) {</div>
<div class="line"> warn <span class="stringliteral">&quot;GarbageCollector:\t[$meadow_signature Meadow:]\t&quot;</span>.join(<span class="stringliteral">&#39;, &#39;</span>, map { <span class="stringliteral">&quot;$_:$status_count-&gt;{$_}&quot;</span> } keys %$status_count ).<span class="stringliteral">&quot;\n\n&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">while</span>(my ($meadow_type, $pid_to_lost_worker) = each %mt_and_pid_to_lost_worker) {</div>
<div class="line"> my $this_meadow = $valley-&gt;available_meadow_hash-&gt;{$meadow_type};</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span>(my $lost_this_meadow = scalar(keys %$pid_to_lost_worker) ) {</div>
<div class="line"> warn <span class="stringliteral">&quot;GarbageCollector:\tDiscovered $lost_this_meadow lost $meadow_type Workers\n&quot;</span>;</div>
<div class="line"></div>
<div class="line"> my $report_entries = {};</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span>($this_meadow-&gt;can(<span class="stringliteral">&#39;find_out_causes&#39;</span>)) {</div>
<div class="line"> die <span class="stringliteral">&quot;Your Meadow::$meadow_type driver now has to support get_report_entries_for_process_ids() method instead of find_out_causes(). Please update it.\n&quot;</span>;</div>
<div class="line"></div>
<div class="line"> } elsif($this_meadow-&gt;can(<span class="stringliteral">&#39;get_report_entries_for_process_ids&#39;</span>)) {</div>
<div class="line"> $report_entries = $this_meadow-&gt;get_report_entries_for_process_ids( keys %$pid_to_lost_worker );</div>
<div class="line"> my $lost_with_known_cod = scalar( grep { $_-&gt;{<span class="stringliteral">&#39;cause_of_death&#39;</span>} } values %$report_entries);</div>
<div class="line"> warn <span class="stringliteral">&quot;GarbageCollector:\tFound why $lost_with_known_cod of $meadow_type Workers died\n&quot;</span>;</div>
<div class="line"> } <span class="keywordflow">else</span> {</div>
<div class="line"> warn <span class="stringliteral">&quot;GarbageCollector:\t$meadow_type meadow does not support post-mortem examination\n&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> warn <span class="stringliteral">&quot;GarbageCollector:\tReleasing the jobs\n&quot;</span>;</div>
<div class="line"> <span class="keywordflow">while</span>(my ($process_id, $worker) = each %$pid_to_lost_worker) {</div>
<div class="line"> $worker-&gt;when_died( $report_entries-&gt;{$process_id}{<span class="stringliteral">&#39;when_died&#39;</span>} );</div>
<div class="line"> $worker-&gt;cause_of_death( $report_entries-&gt;{$process_id}{<span class="stringliteral">&#39;cause_of_death&#39;</span>} );</div>
<div class="line"> $self-&gt;register_worker_death( $worker );</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span>( %$report_entries ) { # use the opportunity to also <a class="code" href="class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_d_b_s_q_l_1_1_base_adaptor.html#a23e67bcbf6294126212da34c0c5a2a90">store</a> resource <a class="code" href="all__tests_8pl.html#a9449f3118943816afb79e9c3394972ca">usage</a> of the buried workers:</div>
<div class="line"> my $processid_2_workerid = { map { $_ =&gt; $pid_to_lost_worker-&gt;{$_}-&gt;dbID } keys %$pid_to_lost_worker };</div>
<div class="line"> $self-&gt;store_resource_usage( $report_entries, $processid_2_workerid );</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"><span class="preprocessor"> # the following bit is completely Meadow-agnostic and only restores database integrity:</span></div>
<div class="line"><span class="preprocessor"></span> <span class="keywordflow">if</span>($check_buried_in_haste) {</div>
<div class="line"> warn <span class="stringliteral">&quot;GarbageCollector:\tChecking for Workers/Roles buried in haste...\n&quot;</span>;</div>
<div class="line"> my $buried_in_haste_list = $self-&gt;db-&gt;get_RoleAdaptor-&gt;fetch_all_finished_roles_with_unfinished_jobs();</div>
<div class="line"> <span class="keywordflow">if</span>(my $bih_number = scalar(@$buried_in_haste_list)) {</div>
<div class="line"> warn <span class="stringliteral">&quot;GarbageCollector:\tfound $bih_number jobs, reclaiming.\n\n&quot;</span>;</div>
<div class="line"> <span class="keywordflow">if</span>($bih_number) {</div>
<div class="line"> my $job_adaptor = $self-&gt;db-&gt;get_AnalysisJobAdaptor;</div>
<div class="line"> <span class="keywordflow">foreach</span> my $role (@$buried_in_haste_list) {</div>
<div class="line"> $job_adaptor-&gt;release_undone_jobs_from_role( $role );</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> } <span class="keywordflow">else</span> {</div>
<div class="line"> warn <span class="stringliteral">&quot;GarbageCollector:\tfound none\n&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line">}</div>
<div class="line"> my $status = $pid_to_worker_status-&gt;{$process_id};</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span>($bury_unkwn_workers and ($status eq <span class="stringliteral">&#39;UNKWN&#39;</span>)) {</div>
<div class="line"> <span class="keywordflow">if</span>( my $meadow = $valley-&gt;find_available_meadow_responsible_for_worker( $worker ) ) {</div>
<div class="line"> <span class="keywordflow">if</span>($meadow-&gt;can(<span class="stringliteral">&#39;kill_worker&#39;</span>)) {</div>
<div class="line"> <span class="keywordflow">if</span>($worker-&gt;meadow_user eq $ENV{<span class="stringliteral">&#39;USER&#39;</span>}) { # <span class="keywordflow">if</span> I<span class="stringliteral">&#39;m actually allowed to kill the worker...</span></div>
<div class="line"><span class="stringliteral"> warn &quot;GarbageCollector:\tKilling/forgetting the UNKWN worker by process_id $process_id&quot;;</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> $meadow-&gt;kill_worker($worker, 1);</span></div>
<div class="line"><span class="stringliteral"> $status = &#39;</span><span class="stringliteral">&#39;; # make it look like LOST</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> if($status) { # can be RUN|PEND|xSUSP</span></div>
<div class="line"><span class="stringliteral"> $meadow_status_counts{$meadow_signature}{$status}++;</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> # only prepare once at most:</span></div>
<div class="line"><span class="stringliteral"> $update_when_seen_sth ||= $self-&gt;prepare( $update_when_seen_sql );</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> $update_when_seen_sth-&gt;execute( $worker-&gt;dbID );</span></div>
<div class="line"><span class="stringliteral"> } else {</span></div>
<div class="line"><span class="stringliteral"> $meadow_status_counts{$meadow_signature}{&#39;</span>LOST<span class="stringliteral">&#39;}++;</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> $mt_and_pid_to_lost_worker{$meadow_type}{$process_id} = $worker;</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"> } else {</span></div>
<div class="line"><span class="stringliteral"> $meadow_status_counts{$meadow_signature}{&#39;</span>UNREACHABLE<span class="stringliteral">&#39;}++; # Worker is unreachable from this Valley</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> $update_when_seen_sth-&gt;finish() if $update_when_seen_sth;</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> # print a quick summary report:</span></div>
<div class="line"><span class="stringliteral"> while(my ($meadow_signature, $status_count) = each %meadow_status_counts) {</span></div>
<div class="line"><span class="stringliteral"> warn &quot;GarbageCollector:\t[$meadow_signature Meadow:]\t&quot;.join(&#39;</span>, <span class="stringliteral">&#39;, map { &quot;$_:$status_count-&gt;{$_}&quot; } keys %$status_count ).&quot;\n\n&quot;;</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> while(my ($meadow_type, $pid_to_lost_worker) = each %mt_and_pid_to_lost_worker) {</span></div>
<div class="line"><span class="stringliteral"> my $this_meadow = $valley-&gt;available_meadow_hash-&gt;{$meadow_type};</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> if(my $lost_this_meadow = scalar(keys %$pid_to_lost_worker) ) {</span></div>
<div class="line"><span class="stringliteral"> warn &quot;GarbageCollector:\tDiscovered $lost_this_meadow lost $meadow_type Workers\n&quot;;</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> my $report_entries = {};</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> if($this_meadow-&gt;can(&#39;</span>find_out_causes<span class="stringliteral">&#39;)) {</span></div>
<div class="line"><span class="stringliteral"> die &quot;Your Meadow::$meadow_type driver now has to support get_report_entries_for_process_ids() method instead of find_out_causes(). Please update it.\n&quot;;</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> } elsif($this_meadow-&gt;can(&#39;</span>get_report_entries_for_process_ids<span class="stringliteral">&#39;)) {</span></div>
<div class="line"><span class="stringliteral"> $report_entries = $this_meadow-&gt;get_report_entries_for_process_ids( keys %$pid_to_lost_worker );</span></div>
<div class="line"><span class="stringliteral"> my $lost_with_known_cod = scalar( grep { $_-&gt;{&#39;</span>cause_of_death<span class="stringliteral">&#39;} } values %$report_entries);</span></div>
<div class="line"><span class="stringliteral"> warn &quot;GarbageCollector:\tFound why $lost_with_known_cod of $meadow_type Workers died\n&quot;;</span></div>
<div class="line"><span class="stringliteral"> } else {</span></div>
<div class="line"><span class="stringliteral"> warn &quot;GarbageCollector:\t$meadow_type meadow does not support post-mortem examination\n&quot;;</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> warn &quot;GarbageCollector:\tReleasing the jobs\n&quot;;</span></div>
<div class="line"><span class="stringliteral"> while(my ($process_id, $worker) = each %$pid_to_lost_worker) {</span></div>
<div class="line"><span class="stringliteral"> $worker-&gt;when_died( $report_entries-&gt;{$process_id}{&#39;</span>when_died<span class="stringliteral">&#39;} );</span></div>
<div class="line"><span class="stringliteral"> $worker-&gt;cause_of_death( $report_entries-&gt;{$process_id}{&#39;</span>cause_of_death<span class="stringliteral">&#39;} );</span></div>
<div class="line"><span class="stringliteral"> $self-&gt;register_worker_death( $worker );</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> if( %$report_entries ) { # use the opportunity to also store resource usage of the buried workers:</span></div>
<div class="line"><span class="stringliteral"> my $processid_2_workerid = { map { $_ =&gt; $pid_to_lost_worker-&gt;{$_}-&gt;dbID } keys %$pid_to_lost_worker };</span></div>
<div class="line"><span class="stringliteral"> $self-&gt;store_resource_usage( $report_entries, $processid_2_workerid );</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"></span></div>
<div class="line"><span class="stringliteral"> # the following bit is completely Meadow-agnostic and only restores database integrity:</span></div>
<div class="line"><span class="stringliteral"> if($check_buried_in_haste) {</span></div>
<div class="line"><span class="stringliteral"> warn &quot;GarbageCollector:\tChecking for Workers/Roles buried in haste...\n&quot;;</span></div>
<div class="line"><span class="stringliteral"> my $buried_in_haste_list = $self-&gt;db-&gt;get_RoleAdaptor-&gt;fetch_all_finished_roles_with_unfinished_jobs();</span></div>
<div class="line"><span class="stringliteral"> if(my $bih_number = scalar(@$buried_in_haste_list)) {</span></div>
<div class="line"><span class="stringliteral"> warn &quot;GarbageCollector:\tfound $bih_number jobs, reclaiming.\n\n&quot;;</span></div>
<div class="line"><span class="stringliteral"> if($bih_number) {</span></div>
<div class="line"><span class="stringliteral"> my $job_adaptor = $self-&gt;db-&gt;get_AnalysisJobAdaptor;</span></div>
<div class="line"><span class="stringliteral"> foreach my $role (@$buried_in_haste_list) {</span></div>
<div class="line"><span class="stringliteral"> $job_adaptor-&gt;release_undone_jobs_from_role( $role );</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"> } else {</span></div>
<div class="line"><span class="stringliteral"> warn &quot;GarbageCollector:\tfound none\n&quot;;</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral"> }</span></div>
<div class="line"><span class="stringliteral">}</span></div>
</div><!-- fragment --> </div>
</div>
</div>
......
......@@ -282,8 +282,7 @@ Description</h1>
<div class="line"> $self-&gt;dbc and $self-&gt;dbc-&gt;disconnect_when_inactive(1); # release <span class="keyword">this</span> connection <span class="keywordflow">for</span> the duration of system() call</div>
<div class="line"> my $return_value;</div>
<div class="line"> my $stderr = tee_stderr {</div>
<div class="line"> system(@cmd_to_run);</div>
<div class="line"> $return_value = $? &gt;&gt; 8;</div>
<div class="line"> $return_value = system(@cmd_to_run);</div>
<div class="line"> };</div>
<div class="line"> $self-&gt;dbc and $self-&gt;dbc-&gt;disconnect_when_inactive(0); # allow the <a class="code" href="class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_process.html#a9d01ac47d41d31f30aca69b0220e0d9d">worker</a> to keep the connection open again</div>
<div class="line"></div>
......@@ -321,7 +320,16 @@ Description</h1>
<div class="line"> my $stderr = $self-&gt;param(<span class="stringliteral">&#39;stderr&#39;</span>);</div>
<div class="line"> my $flat_cmd = $self-&gt;param(<span class="stringliteral">&#39;flat_cmd&#39;</span>);</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span> ($return_value) {</div>
<div class="line"> <span class="keywordflow">if</span> ($return_value and not ($return_value &gt;&gt; 8)) {</div>
<div class="line"><span class="preprocessor"> # The job has been killed. The best is to wait a bit that LSF kills</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> # the worker too</span></div>
<div class="line"><span class="preprocessor"></span> sleep 30;</div>
<div class="line"><span class="preprocessor"> # If we reach this point, perhaps it was killed by a user</span></div>
<div class="line"><span class="preprocessor"></span> die sprintf( <span class="stringliteral">&quot;&#39;%s&#39; was killed with code=%d\nstderr is: %s\n&quot;</span>, $flat_cmd, $return_value, $stderr);</div>
<div class="line"></div>
<div class="line"> } elsif ($return_value) {</div>
<div class="line"><span class="preprocessor"> # &quot;Normal&quot; process exit with a non-zero code</span></div>
<div class="line"><span class="preprocessor"></span> $return_value &gt;&gt;= 8;</div>
<div class="line"></div>
<div class="line"><span class="preprocessor"> # We create a dataflow event depending on the exit code of the process.</span></div>
<div class="line"><span class="preprocessor"></span> <span class="keywordflow">if</span> (exists $self-&gt;param(<span class="stringliteral">&#39;return_codes_2_branches&#39;</span>)-&gt;{$return_value}) {</div>
......
......@@ -130,8 +130,6 @@ Files</h2></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:stringify__test_8pl"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stringify__test_8pl.html">stringify_test.pl</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:test__confess_8pl"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="test__confess_8pl.html">test_confess.pl</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
......
......@@ -8,6 +8,5 @@ var dir_3612b2f14309adebdf3758e6dc628f9f =
[ "parse_underscored.pl", "parse__underscored_8pl.html", null ],
[ "primary_key.pl", "primary__key_8pl.html", null ],
[ "store_with_overflow.pl", "store__with__overflow_8pl.html", null ],
[ "stringify_test.pl", "stringify__test_8pl.html", null ],
[ "test_confess.pl", "test__confess_8pl.html", null ]
[ "stringify_test.pl", "stringify__test_8pl.html", null ]
];
\ No newline at end of file
......@@ -248,8 +248,7 @@ $(document).ready(function(){initNavTree('files.html','');});
<tr id="row_4_5_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="parse__underscored_8pl.html" target="_self">parse_underscored.pl</a></td><td class="desc"></td></tr>
<tr id="row_4_6_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="primary__key_8pl.html" target="_self">primary_key.pl</a></td><td class="desc"></td></tr>
<tr id="row_4_7_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="store__with__overflow_8pl.html" target="_self">store_with_overflow.pl</a></td><td class="desc"></td></tr>
<tr id="row_4_8_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="stringify__test_8pl.html" target="_self">stringify_test.pl</a></td><td class="desc"></td></tr>
<tr id="row_4_9_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="test__confess_8pl.html" target="_self">test_confess.pl</a></td><td class="desc"></td></tr>
<tr id="row_4_8_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="stringify__test_8pl.html" target="_self">stringify_test.pl</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
......
......@@ -336,7 +336,7 @@ Functions</h2></td></tr>
<div class="line"></div>
<div class="line"> my @cmds = (</div>
<div class="line"> <span class="stringliteral">&quot;perl $sql2html -i $ehrd/sql/tables.mysql -d Hive -intro $ehrd/docs/hive_schema.inc -sort_headers 0 -sort_tables 0 -o $ehrd/docs/tmp_hive_schema.html&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;(head -n 3 $ehrd/docs/tmp_hive_schema.html ; cat $ehrd/docs/hive_schema.hdr ; tail -n +4 $ehrd/docs/tmp_hive_schema.html) &gt; $ehrd/docs/hive_schema.html&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;(head -n 3 $ehrd/docs/tmp_hive_schema.html ; cat $ehrd/docs/hive_schema.hdr ; tail -n +4 $ehrd/docs/tmp_hive_schema.html) | sed &#39;s/\\/i\\/16\\//http:\\/\\/www.ensembl.org\\/i\\/16\\//&#39; &gt; $ehrd/docs/hive_schema.html&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;rm $ehrd/docs/tmp_hive_schema.html&quot;</span>, # <span class="keyword">remove</span> the non-patched version</div>
<div class="line"> );</div>
<div class="line"></div>
......
......@@ -171,8 +171,8 @@ var NAVTREEINDEX3 =
"functions_d.html":[1,3,0,4],
"functions_e.html":[1,3,0,5],
"functions_f.html":[1,3,0,6],
"functions_func.html":[1,3,1,0],
"functions_func.html":[1,3,1],
"functions_func.html":[1,3,1,0],
"functions_func_a.html":[1,3,1,1],
"functions_func_b.html":[1,3,1,2],
"functions_func_c.html":[1,3,1,3],
......@@ -234,20 +234,20 @@ var NAVTREEINDEX3 =
"make__docs_8pl.html#a6beb731e13cc7bf174c278941604f2c6":[2,0,2,9,1],
"make__docs_8pl.html#abfd18200e24abf7b7b0a2da0052e407c":[2,0,2,9,2],
"make__docs_8pl.html#ae93420c01717b5507a6abee45eea82f5":[2,0,2,9,0],
"namespace_bio.html":[0,0,0],
"namespace_bio.html":[1,0,0],
"namespace_bio.html":[0,0,0],
"namespace_bio_1_1_ens_e_m_b_l.html":[0,0,0,0],
"namespace_bio_1_1_ens_e_m_b_l.html":[1,0,0,0],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive.html":[1,0,0,0,0],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive.html":[0,0,0,0,0],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_d_b_s_q_l.html":[0,0,0,0,0,0],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_d_b_s_q_l.html":[1,0,0,0,0,0],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_d_b_s_q_l.html":[0,0,0,0,0,0],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_meadow.html":[1,0,0,0,0,1],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_meadow.html":[0,0,0,0,0,1],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_pipe_config.html":[0,0,0,0,0,2],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_pipe_config.html":[1,0,0,0,0,2],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_runnable_d_b.html":[0,0,0,0,0,3],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_runnable_d_b.html":[1,0,0,0,0,3],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_runnable_d_b_1_1_long_mult.html":[1,0,0,0,0,3,0],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_runnable_d_b_1_1_long_mult.html":[0,0,0,0,0,3,0]
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_runnable_d_b_1_1_long_mult.html":[0,0,0,0,0,3,0],
"namespace_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_runnable_d_b_1_1_long_mult.html":[1,0,0,0,0,3,0]
};
......@@ -20,6 +20,5 @@ var NAVTREEINDEX4 =
"standalone_job_8pl.html#a3ce8b237b3bdb2817dac6f769e5768c2":[2,0,2,12,0],
"store__with__overflow_8pl.html":[2,0,4,7],
"stringify__test_8pl.html":[2,0,4,8],
"test__confess_8pl.html":[2,0,4,9],
"test__reg__conf_8pl.html":[2,0,1,0,0,0,2,16]
};
......@@ -5,7 +5,6 @@ var searchData=
['tabledumperzipper_5fconf_2epm',['TableDumperZipper_conf.pm',['../_table_dumper_zipper__conf_8pm.html',1,'']]],
['test',['Test',['../class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_utils_1_1_test.html',1,'Bio::EnsEMBL::Hive::Utils']]],
['test_2epm',['Test.pm',['../_test_8pm.html',1,'']]],
['test_5fconfess_2epl',['test_confess.pl',['../test__confess_8pl.html',1,'']]],
['test_5freg_5fconf_2epl',['test_reg_conf.pl',['../test__reg__conf_8pl.html',1,'']]],
['throw',['throw',['../class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_process.html#adfc1461a9ef5da83597f054172e10c42',1,'Bio::EnsEMBL::Hive::Process::throw()'],['../class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_utils.html#af71b51b03c60163952912de68e5eabf6',1,'Bio::EnsEMBL::Hive::Utils::throw()']]],
['to_5fanalysis',['to_analysis',['../class_bio_1_1_ens_e_m_b_l_1_1_hive_1_1_dataflow_rule.html#ae069a34e628c9f6348c5110a8e9b29b6',1,'Bio::EnsEMBL::Hive::DataflowRule']]],
......
......@@ -2,7 +2,6 @@ var searchData=
[
['tabledumperzipper_5fconf_2epm',['TableDumperZipper_conf.pm',['../_table_dumper_zipper__conf_8pm.html',1,'']]],
['test_2epm',['Test.pm',['../_test_8pm.html',1,'']]],
['test_5fconfess_2epl',['test_confess.pl',['../test__confess_8pl.html',1,'']]],
['test_5freg_5fconf_2epl',['test_reg_conf.pl',['../test__reg__conf_8pl.html',1,'']]],
['topup_5fconf_2epm',['TopUp_conf.pm',['../_top_up__conf_8pm.html',1,'']]]
];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>ensembl-hive: t/test_confess.pl File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">ensembl-hive
&#160;<span id="projectnumber">2.3</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"