update controller code

This commit is contained in:
Rongsong Shen 2025-11-05 16:58:57 +08:00
parent 2836d196da
commit 41f56fa6ed
54 changed files with 9688 additions and 214 deletions

View file

@ -0,0 +1,172 @@
#if !defined(_CLUSTER_H_)
#define _CLUSTER_H_ 1
#include "config.h"
#include <pthread.h>
#include <stdint.h>
#include "hook.h"
#include "htab.h"
#include "kvmgr.h"
#include "myconf.h"
#include "mylock.h"
#include "netio.h"
#include "objmgr.h"
#include "vtaskmgr.h"
#include "worker.h"
#include "xce/cluster_def.h"
#include "xce/types.h"
#include "xlist.h"
#include "zarray.h"
typedef int (*collect_check_fn_t)(void*);
extern int check_controller(void*);
extern int cluster_init(cluster_t*);
extern int cluster_start(cluster_t*);
extern int cluster_run(cluster_t*);
extern void cluster_fini(cluster_t*);
extern int register_types(cluster_t*);
extern int jobmgr_init(jobmgr_t*, int, int);
extern void jobmgr_fini(jobmgr_t*);
extern int workermgr_init(workermgr_t*, int, int);
extern void workermgr_fini(workermgr_t*);
extern int workermgr_add(workermgr_t*,
worker_t*);
extern worker_t* workermgr_lock(workermgr_t*,
char*, int);
extern worker_t* workermgr_lock_byid(workermgr_t*,
int, int);
extern void workermgr_del(workermgr_t*, worker_t*);
extern int worker_ctrl(cluster_t*, xce_hostctrl_t*);
extern void qmgr_fini(qmgr_t*);
extern int qmgr_init(qmgr_t*, int, int);
extern int qmgr_add(qmgr_t*, queue_t*);
extern queue_t* qmgr_lockq(qmgr_t*, char*, int);
extern void qmgr_delq(qmgr_t*, queue_t*);
extern int qmgr_iter(qmgr_t*, xlist_t*, void*);
extern xce_resource_t* get_resource(cluster_t*,
char*);
extern int add_to_xlist(xlist_t*, void*);
extern int add_worker_to_xlist(xlist_t*, void*);
extern int add_queue_to_xlist(xlist_t*, void*);
extern int add_job_to_xlist(xlist_t*, void*);
extern void resource_killer(void*);
extern int add_resource(void*, char*, char*,
int, xce_order_t,
int, int);
extern int resmgr_init(resmgr_t*, int, int, int);
extern void resmgr_fini(resmgr_t*);
extern int32_t resmgr_add_res(resmgr_t*,
xce_resource_t*);
extern xce_resource_t* resmgr_lockres(resmgr_t* mgr,
char*, int);
extern void res_obj_killer(xce_resource_t*);
extern void resmgr_del_res(resmgr_t*,
xce_resource_t*);
extern int resmgr_iter(resmgr_t*, xlist_t*, void*);
extern void config_obj_killer(xce_config_t*);
extern int update_resvals(cluster_t*, worker_t*,
int, xce_resval_t*);
extern int load_jobs(void*);
extern int update_job(void*, uint64_t, xce_kv_list_t*);
extern int do_job_started(void*, uint64_t, int, int*, int, int*);
extern queue_t* create_queue(cluster_t*, xce_queue_t*);
extern int build_queues(void*);
extern void queue_fini(queue_t*);
extern int queue_ctrl(cluster_t*, xce_queuectrl_t*);
extern queue_t* qmgr_lockq(qmgr_t*, char*, int);
extern int xce_update_data(endpoint_t*, cluster_t*,
int, int, int*, int, xce_kv_t*);
extern int on_scheduler_join(cluster_t*);
extern int xce_push_reslist(endpoint_t*, cluster_t*,
int, xce_resource_t**);
extern int xce_push_confvars(endpoint_t*, cluster_t*,
int, xce_config_t**);
extern int xce_push_workerlist(endpoint_t*, cluster_t*,
int, xce_worker_t**);
extern int xce_push_joblist(endpoint_t*, cluster_t*,
int, xce_job_t**);
extern int xce_push_queuelist(endpoint_t*, cluster_t*,
int, xce_queue_t**);
extern int xcesched_push_job(cluster_t*, uint64_t);
extern int on_worker_join(void*, endpoint_t*);
extern int get_resval(cluster_t*, char*,
char*, xce_val_t*);
extern job_t* jobmgr_lockjob(jobmgr_t*, uint64_t, int);
extern int32_t jobmgr_add_job(jobmgr_t*, job_t*);
extern void jobmgr_del_job(jobmgr_t*, job_t*);
extern void job_obj_killer(job_t*);
extern int handle_push(struct capn*, cluster_t*,
endpoint_t*, struct Request*);
extern int do_get_op(cluster_t*, endpoint_t*, xce_request_t*);
extern int do_update_op(cluster_t*, endpoint_t*, xce_request_t*);
extern int handle_join(cluster_t*,
endpoint_t*,
xce_request_t*);
extern int handle_reply(endpoint_t*, struct Request*,
cluster_t*);
extern int handle_jobdispatch(cluster_t*, endpoint_t*,
xce_request_t*);
extern int handle_jobsubmit(cluster_t*, endpoint_t*, xce_request_t*);
extern int handle_worker_leave(cluster_t*, int);
extern int handle_scheduler_leave(cluster_t*);
extern int handle_clusterconf(cluster_t*, endpoint_t*, xce_request_t*);
extern void collect_confvars(cluster_t*, collect_check_fn_t, int*, xce_config_t***);
extern void collect_queues(cluster_t*, collect_check_fn_t, int*, xce_queue_t***);
extern void collect_resources(cluster_t*, collect_check_fn_t, int*, xce_resource_t***);
extern void collect_jobs(cluster_t*, collect_check_fn_t, int*, xce_job_t***);
extern void collect_workers(cluster_t*, collect_check_fn_t, int*, xce_worker_t***);
extern void deref_objs(int, void**);
extern int get_queue_exec(cluster_t*, char*, char**, char**);
extern int jobmgr_iter(jobmgr_t*, xlist_t*, void*);
extern int workermgr_iter(workermgr_t*, xlist_t*, void*);
extern int on_job_start(cluster_t*, job_pidinfo_t*);
extern int on_job_finish(cluster_t*, xce_jobfinish_t*);
extern int on_job_fail(cluster_t*, job_failinfo_t*);
extern int on_job_stop(cluster_t*, uint64_t);
extern int on_job_resume(cluster_t*, uint64_t);
extern int on_job_postdone(cluster_t*, endpoint_t*, uint64_t);
extern int on_job_ckpt(cluster_t*, endpoint_t*, xce_ckptinfo_t*);
extern int notify(cluster_t*, endpoint_t*, xce_notify_data_t*);
extern int not_null_check(void*);
extern int check_worker_(xce_worker_t*);
extern int update_resval_list(cluster_t*, worker_t*, xce_resval_list_t*);
extern int do_jobcontrol_op(cluster_t*, endpoint_t*, xce_request_t*);
extern int job_ctrl(cluster_t*, xce_jobctrl_t*);
extern int update_job_rusages(cluster_t*, endpoint_t*, xce_request_t*);
extern int update_host_runusage(xce_job_runusage_t**, char*,
int, xce_rusage_t**);
extern int update_pids(job_pidinfo_t**, int, int*);
extern int update_pgids(job_pidinfo_t**, int, int*);
extern int get_ep_role(endpoint_t*);
extern worker_t* get_ep_worker(cluster_t*, endpoint_t*, int);
extern int not_null_check(void*);
extern int check_worker_(xce_worker_t*);
extern int update_resval_list(cluster_t*, worker_t*, xce_resval_list_t*);
extern int do_jobcontrol_op(cluster_t*, endpoint_t*, xce_request_t*);
extern int job_ctrl(cluster_t*, xce_jobctrl_t*);
extern int do_queuecontrol_op(cluster_t*, endpoint_t*, xce_request_t*);
extern int do_runtasks(cluster_t*, endpoint_t*, xce_request_t*);
extern int on_task_start(cluster_t*, xce_task_pidinfo_t*);
extern int on_task_fail(cluster_t*, xce_task_failinfo_t*);
extern int on_task_finish(cluster_t*, xce_task_finish_t*);
extern int xce_controller_res_init(cluster_t*);
extern int map_resource_to_host(char*, cluster_t*);
extern int release_resource_from_worker(char*, cluster_t*);
extern int collect_resval_with_idx(zarray_t*, int*, xce_val_with_idx_t***);
#endif

View file

@ -0,0 +1,27 @@
#if !defined(_WORKER_H_)
#define _WORKER_H_ 1
#include "config.h"
#include "mylock.h"
#include "netio.h"
#include "xce/types.h"
#include "zarray.h"
typedef struct {
uint64_t jobid;
xce_alloc_t alloc;
double used;
} res_usage_t;
typedef struct {
xce_worker_t host;
char hostkey[XCE_MAXKEY_LEN];
endpoint_t* ep;
int idx;
zarray_t usages;
} worker_t;
extern int add_worker(void*, endpoint_t*, const char*,
hostattrs_t*);
extern int restore_worker(void*, xce_worker_t);
#endif