feat(job-queue): deesigning methods

This commit is contained in:
Jef Roosens 2023-02-23 09:47:47 +01:00
parent 8668148e96
commit 02bd2c24b7
Signed by: Jef Roosens
GPG key ID: B75D4F293C7052DB
2 changed files with 91 additions and 9 deletions

View file

@ -14,27 +14,82 @@
typedef enum vieter_job_state {
vieter_job_state_queued = 0,
vieter_job_state_ready = 1,
vieter_job_state_build_finished = 2
vieter_job_state_build_finished = 2,
vieter_job_state_failed = 3
} vieter_job_state;
// This macro should be kept in sync with the above enum
#define VIETER_JOB_STATES 3
#define VIETER_JOB_STATES 4
/*
* Struct storing a report for why a certain job failed to be processed in the
* given state.
*/
typedef struct vieter_job_failure_report {
vieter_job_state failed_state;
char *msg;
} vieter_job_failure_report;
vieter_job_failure_report *vieter_job_failure_report_init();
void vieter_job_failure_report_free(vieter_job_failure_report **ptp);
/*
* Represents a job currently being processed in the system. A job migrates
* between different states before finally being removed from the queue.
*/
typedef struct vieter_job {
int id;
uint64_t id;
uint64_t next_scheduled_time;
vieter_cron_expression *ce;
bool single;
vieter_job_state state;
uint64_t state_transition_times[VIETER_JOB_STATES];
bool dispatched;
vieter_cron_expression *schedule;
void *build_config;
vieter_job_failure_report *failure_report;
uint64_t state_transition_times[VIETER_JOB_STATES];
vieter_job_state current_state;
bool single;
bool dispatched;
} vieter_job;
/*
* Allocate a new vieter_job object.
*/
vieter_job *vieter_job_init();
void vieter_job_free(vieter_job **ptp);
/*
* Represents the actual queue managing the list of jobs.
*/
typedef struct vieter_job_queue vieter_job_queue;
typedef enum vieter_job_queue_error {
vieter_job_queue_ok = 0,
vieter_job_queue_not_found = 1
} vieter_job_queue_error;
/*
* Allocate and initialize a new job queue.
*/
vieter_job_queue *vieter_job_queue_init();
void vieter_job_queue_insert(int id);
void vieter_job_queue_free(vieter_job_queue **ptp);
/*
* Insert the given job into the system.
*/
vieter_job_queue_error vieter_job_queue_insert(vieter_job *job);
/*
* Dispatch the job with the given id, returning the pointer to the job.
* Dispatching a job removes it from its respective state's queue.
*/
vieter_job_queue_error vieter_job_queue_dispatch(vieter_job **out, uint64_t id);
/*
* Transition the job with the given id to the new state. This sets the
* job's dispatch flag to false, and adds it to the new state's queue.
*/
vieter_job_queue_error vieter_job_queue_transition(uint64_t id,
vieter_job_state new_state);
#endif