The job-o-holic crate is a job scheduling library. It allows an application application to (pre)define a set of jobs, and then trigger them to run at the appropriate times.
Use-cases
Before job-o-holic there were two different special-purpose subsystems within two different projects. It was observed that while these two subsystems were very different on the surface, they turned out to be two different variants of job management/scheduling. job-o-holic became the work to unify and generalize these two subsystems.
Case 1: Build system
A high-level build system needed to perform several different steps, some of which were completely disjoint, and some that were dependend on each other:
- Build a FPGA bitstream and an associated hardware platform
- Checking out source code repositories
- Building components from repositories
- Generating an initramfs image
- Creating installation archives
Some of these steps take a relatively long time to run, but they are highly parallelizable. The subsystem was used define jobs and their dependencies, and let it parallellize as appropriate.
Case 2: Database maintenance
A long-running service needed to run database regularly (once a week) or on demand.
Change log
The details of changes can always be found in the timeline, but for a high-level view of changes between released versions there's a manually maintained Change Log.
Project status
This library is highly experimental and currenltly has a MVP implementation for one of the core features. In early versions, excpect:
- very breaking changes
- incomplete, or even incorrect, documentation