IPF Persistent Scheduler

Introduction

IPF’s Persistent Scheduler allows you to schedule jobs of any kind.

It is based on the Quartz scheduler and supports two types of job scheduling:

  • Recurrent jobs: defined using cron expressions, which are specialised timers that define points in time for recurring task execution.

  • One-time jobs: defined using a Java LocalDateTime or Instant object for millisecond-precise, single-execution scheduling.

The scheduler also supports calendars, which can be used to exclude certain blocks of time from scheduling. This setup enables the flexible execution of both one-time and recurrent jobs. It also features a persistence layer, meaning that jobs are saved to a database, so even if an application crashes or restarts, previously scheduled jobs are recovered and continue execution as planned.

The Scheduler includes fail-safes, such as a rescheduling module that runs during startup. This module restores all previously scheduled jobs into Quartz following a failure. To work with the Scheduler, begin with the SchedulingModuleInterface.

Finally, the persistent scheduler is designed to be run in a Akka Cluster to ensure that jobs are scheduled across the cluster and can survive any number of node failures (including a total outage). Certain aspects like rehydration of jobs (which means reloading jobs following a failure) and processing of failed jobs are run on a Cluster Singleton to prevent duplicate processing in these scenarios.

The architecture for the scheduler is shown below:

service architecture