[Bioperl-pipeline] job dependence

Shawn Hoon shawnh at fugu-sg.org
Sun Mar 16 10:26:00 EST 2003


> Hi Jeremy,

 From your comments, I would to ask others in the list whether they 
think that setting new jobs
based on the return_ids of completed jobs should continue to be 
supported. My feeling is that eventually
InputCreates provide more flexibility ultimately.



shawn



> I'm marking my changes with ->.
>
> There appear to be two primary places jobs are queued in the
> PipelineManager.pl script. The first looks like:
>
>     foreach my $job(@incomplete_jobs){
>
>         #check whether output of job needed for downstream analysis
>         my $job_depend = 
> $ruleAdaptor->check_dependency_by_job($job, at rules);
>         $job->dependency($job_depend);
>
> The second loop occurs after this and basically sets up new jobs based 
> on
> completed jobs. It looks like:
>
>     foreach my $job (@completed_jobs) {
>       my ($new_jobs) = &create_new_job($job);
>       if(scalar(@{$new_jobs})){
>         print STDERR "Creating ".scalar(@{$new_jobs})." jobs\n";
>       }
>       foreach my $new_job (@{$new_jobs}){
> ->      my $job_depend =
> $ruleAdaptor->check_dependency_by_job($new_job, at rules);
> ->      $new_job->dependency($job_depend);
>

> Above, you can see that I simply copied the dependency check from the
> first section into the appropriate place in the second section. I 
> checked
> the Bio::Pipeline::Manager module and these sections are still 
> basically
> the same.
>
> In runner.pl, I also added a variable for the rule adaptor so that I 
> could
> access the check_dependency_by_job function. The changes in runner.pl 
> look
> like:
>
> sub create_new_job{
>     my ($job_id) = @_;
>     my $job = $job_adaptor->fetch_by_dbID($job_id);
> ->  my $ruleAdaptor = $job_adaptor->db->get_RuleAdaptor;
> ->  my @rules       = $ruleAdaptor->fetch_all;
>     my $action = _get_action_by_next_anal($job, at rules);
>     if ($action eq 'WAITFORALL_AND_UPDATE'){
>       my @inputs = $job->inputs;
>       $job->flush_inputs();
>       $job->add_input(\@inputs);
>     }
>
>     # also need to check if next job depends on output from this job
> ->  my $job_depend = 
> $ruleAdaptor->check_dependency_by_job($job, at rules);
> ->  $job->dependency($job_depend);
>
>     return $job;
> }
>
>
>> The popular way now to populate the job and input tables ( among the
>> few of us using biopipe here) is to use InputCreate which is a little
>> job that reside between
>> analysis that has an IOHandler that fetches input ids and creates jobs
>> for the next analysis. This is a more flexible scheme in which embed
>> more specific
>> code that knows how to pair up inputs for a given job.
>
> I'll take a look and maybe post some questions to the mailing list. 
> Thanks.
>
> Jeremy
>
>



More information about the bioperl-pipeline mailing list