++ed by:
David Muir Sharnoff

NAME

 Proc::JobQueue::DependencyJob - dependency-aware job object for Proc::JobQueue

SYNOPSIS

 use Proc::JobQueue::DependencyJob;
 use Object::Dependency;

 $graph = Object::Dependency->new()

 $job = Proc::JobQueue::DependencyJob->new($graph, $callback_func, %params);

 $job->startup()

 $job->job_part_finished()

 $job->jobdone();

 $job->failure(@exit_code)

DESCRIPTION

Proc::JobQueue::DependencyJob is a subclass of Proc::JobQueue::Job used to define jobs to run from a Proc::JobQueue.

DependencyJob jobs are perl objects with a callback API. $job->startup() is called to start the job. That in turn calls, the callback provided in construction. The $job object is added to the argument list for the callback.

The return value from the callback lets startup() know what to do next: the job is finished; the job finished but it remains a dependency in the dependency graph; the job is not done but it should be removed from the dependency graph; or the job is not done and should remain in the dependency graph.

If the job is not done, then it needs to signal it's completion later by calling $job->finished(0) or $job->failure($reason).

CONSTRUCTION

These jobs require a dependency graph for construction. The %params parameter represents additional parameters passed to Proc::JobQueue::Job.

METHODS

In addition to the methods in Proc::JobQueue::Job, DependencyJob provides:

startup()

This is called by Proc::JobQueue::Job::start(). It calls the callback. The callback must return. A reference to self ($job) is provided as an argument to the callback. The return value from the callback must be a string from the following set:

all-done

The job has completed and the dependency in the dependency graph should be removed.

all-keep

The job has not completed and the dependency in the dependency graph should be kept.

The job can be marked as done with:

 $job->job_part_finished($do_startmore)

The dependency can be marked as completed with:

 $job->{dependency_graph}->remove_dependency($job);

Or both the job and the dependency can be marked as done/completed with one call:

 $job->finished(0);
job-done,dep-keep

The job has completed, but it should not be removed from the dependency graph. Somehow the callback must arrange that the dependency graph dependency gets removed later:

 $job->{dependency_graph}->remove_dependency($job);
job-keep,dep-done

The job is not done, but the dependency has been been fullfilled. The job can be marked done with:

 $job->finished(0);

Or

 $job->job_part_finished($do_startmore)

Things which depend on this job are eligible to be started.

failed()

This overrides JobQueue::Job's failure() method to mark the dependency as stuck.

failure(@reason)

This marks this job as failed.

SEE ALSO

Proc::JobQueue::EventQueue Proc::JobQueue::Job Proc::JobQueue::DependencyTask Proc::JobQueue

LICENSE

Copyright (C) 2007-2008 SearchMe, Inc. Copyright (C) 2008-2010 David Sharnoff. Copyright (C) 2011 Google, Inc. This package may be used and redistributed under the terms of either the Artistic 2.0 or LGPL 2.1 license.




Hosting generously
sponsored by Bytemark