NAME
ObjStore::Job - Jobs for a Non-Preemptive Idle-Time Job Scheduler
SYNOPSIS
Add an
ObjStore::Job::Table
to your database.Sub-class
ObjStore::Job
and override thedo_work
method.-
package ObjStore::Job use ObjStore::Mortician;
Maybe all jobs should have delayed destruction by default.
DESCRIPTION
JOB STATES
R running
L infinite loop detected
S sleeping - will retry every second
T suspended
D done
K killed
SCHEDULING PRIORITIES
HIGH PRIORITY <= 0
Allowed to consume all available pizza slices.
TIME-SLICED 1-20
Given pizza slices proportional to the priority until either all the pizza slices are consumed or all the jobs are asleep (feasts induce slumber :-).
IDLE > 20
Given all remaining pizza slices.
TRANSACTION STRATEGY
The whole scheduling operation occurs within a single transaction. While this means that any job can kill the entire transaction, this seems a better choice than wrapping every job in its own mini-transaction. Since transactions are relatively expensive, it is hoped that most of the time all jobs will complete without error.
BUGS
Too bad you can't store CODEREFs in the database.
Time does not necessarily transmute into pizza.