#if !defined(_PLUGIN_H_) #define _PLUGIN_H_ 1 #include #include #include "sched/types.h" typedef void* plugin_data_t; /* hooker of plugin, the first parameter should be xce_sched_plugin_t */ typedef int (*plugin_update_config_hook_t)(void*, xce_conf4sched_t*); typedef int (*plugin_update_queue_hook_t)(void*, xce_sched_queue_t*); typedef int (*plugin_update_job_hook_t)(void*, xce_sched_job_t*); typedef int (*plugin_update_worker_hook_t)(void*, xce_sched_worker_t*); /* initialize function of plugin */ typedef int (*plugin_init_fn_t)(void*); typedef void (*plugin_fini_fn_t)(void*); /* plugin function to elect job to be scheduler */ typedef void* (*plugin_job_election_fn_t)(void*); typedef int (*plugin_begin_session_fn_t)(void*); typedef int (*plugin_end_session_fn_t)(void*); /* allocation function of job */ typedef xce_job_alloc_t* (*plugin_job_allocate_fn_t)(void*, int64_t*); typedef struct { plugin_update_config_hook_t config_hook; plugin_update_queue_hook_t queue_hook; plugin_update_job_hook_t job_hook; plugin_update_worker_hook_t worker_hook; } plugin_hooks_t; typedef struct { char* name; void* sched; plugin_init_fn_t init_fn; plugin_fini_fn_t fini_fn; plugin_begin_session_fn_t begin_session_fn; plugin_end_session_fn_t end_session_fn; plugin_job_election_fn_t job_elect_fn; plugin_job_allocate_fn_t job_alloc_fn; plugin_hooks_t hooks; plugin_data_t data; } xce_sched_plugin_t; extern int plugin_register(void*, void*); extern void plugin_unregister(void*); extern int plugin_config_update(void*, xce_conf4sched_t*); extern int plugin_queue_update(void*, xce_sched_queue_t*); extern int plugin_job_update(void*, xce_sched_job_t*); extern int plugin_worker_update(void*, xce_sched_worker_t*); extern int plugin_begin_session(void*); extern int plugin_end_session(void*); extern int register_fcfs(void*); #endif