job submit and support run in worker

This commit is contained in:
Rongsong Shen 2025-11-28 17:24:31 +08:00
parent 3630e38a07
commit e497dd1b69
18 changed files with 502 additions and 236 deletions

View file

@ -114,30 +114,43 @@ static void* xjob_create(objmgr_t* mgr, objtype_t* type, va_list ap)
job = MYOBJ_TO_OBJ(job_t*, obj);
/* fill job data */
job->job.jobid = submit->jobid;
job->job.queue = create_obj_by_typename(mgr, "xstring", submit->queue);
job->job.sub_time = submit->sub_time;
job->job.queue_time = submit->queue_time;
job->job.jobid = submit->jobid;
job->job.submit = (job_submit_data_t*)calloc(1, sizeof(*(job->job.submit)));
if (job->job.submit == NULL) {
return NULL;
}
job->job.submit->queue
= create_obj_by_typename(mgr, "xstring", submit->submit->queue);
/* FIXME: */
if (1) {
time_t now = time(NULL);
job->job.sub_time = now;
job->job.queue_time = now;
}
if (job->job.queue_time == 0) {
job->job.queue_time = job->job.sub_time;
}
job->job.state = submit->state;
job->job.user = create_obj_by_typename(mgr, "xstring", submit->user);
job->job.state = submit->state;
job->job.submit->user
= create_obj_by_typename(mgr, "xstring", submit->submit->user);
job->job.start_time = submit->start_time;
job->job.finish_time = submit->finish_time;
job->job.job_name
= create_obj_by_typename(mgr, "xstring", submit->job_name);
job->job.project_name
= create_obj_by_typename(mgr, "xstring", submit->project_name);
job->job.user_group
= create_obj_by_typename(mgr, "xstring", submit->user_group);
job->job.job_description
= create_obj_by_typename(mgr, "xstring", submit->job_description);
job->job.resreq = create_obj_by_typename(mgr, "xstring", submit->resreq);
job->job.run_time = submit->run_time;
job->job.mintasks = submit->mintasks;
job->job.maxtasks = submit->maxtasks;
job->job.pending_ctrl = submit->pending_ctrl;
job->job.submit->job_name
= create_obj_by_typename(mgr, "xstring", submit->submit->job_name);
job->job.submit->project_name
= create_obj_by_typename(mgr, "xstring", submit->submit->project_name);
job->job.submit->user_group
= create_obj_by_typename(mgr, "xstring", submit->submit->user_group);
job->job.submit->job_description = create_obj_by_typename(
mgr, "xstring", submit->submit->job_description);
job->job.submit->resreq
= create_obj_by_typename(mgr, "xstring", submit->submit->resreq);
job->job.run_time = submit->run_time;
job->job.submit->mintasks = submit->submit->mintasks;
job->job.submit->maxtasks = submit->submit->maxtasks;
job->job.pending_ctrl = submit->pending_ctrl;
job->job.pidinfo = NULL;
@ -159,35 +172,35 @@ static void* xjob_create(objmgr_t* mgr, objtype_t* type, va_list ap)
}
}
job->job.start_info = NULL;
job->job.submit->start_info = NULL;
if (submit->start_info != NULL) {
job->job.start_info
if (submit->submit->start_info != NULL) {
job->job.submit->start_info
= (job_startinfo_t*)calloc(1, sizeof(job_startinfo_t));
if (job->job.start_info == NULL) {
if (job->job.submit->start_info == NULL) {
SET_ERROR(ENOMEM);
goto clean_job;
}
job->job.start_info->cmdline = create_obj_by_typename(
mgr, "xstring", submit->start_info->cmdline);
job->job.start_info->exdata = create_obj_by_typename(
mgr, "xstring", submit->start_info->exdata);
job->job.start_info->execcwd = create_obj_by_typename(
mgr, "xstring", submit->start_info->execcwd);
job->job.start_info->exechome = create_obj_by_typename(
mgr, "xstring", submit->start_info->exechome);
job->job.start_info->execuser = create_obj_by_typename(
mgr, "xstring", submit->start_info->execuser);
job->job.start_info->launch_type = create_obj_by_typename(
mgr, "xstring", submit->start_info->launch_type);
if (submit->start_info->job_pre_exec != NULL) {
job->job.start_info->job_pre_exec = create_obj_by_typename(
mgr, "xstring", submit->start_info->job_pre_exec);
job->job.submit->start_info->cmdline = create_obj_by_typename(
mgr, "xstring", submit->submit->start_info->cmdline);
job->job.submit->start_info->exdata = create_obj_by_typename(
mgr, "xstring", submit->submit->start_info->exdata);
job->job.submit->start_info->execcwd = create_obj_by_typename(
mgr, "xstring", submit->submit->start_info->execcwd);
job->job.submit->start_info->exechome = create_obj_by_typename(
mgr, "xstring", submit->submit->start_info->exechome);
job->job.submit->start_info->execuser = create_obj_by_typename(
mgr, "xstring", submit->submit->start_info->execuser);
job->job.submit->start_info->launch_type = create_obj_by_typename(
mgr, "xstring", submit->submit->start_info->launch_type);
if (submit->submit->start_info->job_pre_exec != NULL) {
job->job.submit->start_info->job_pre_exec = create_obj_by_typename(
mgr, "xstring", submit->submit->start_info->job_pre_exec);
}
if (submit->start_info->job_post_exec != NULL) {
job->job.start_info->job_post_exec = create_obj_by_typename(
mgr, "xstring", submit->start_info->job_post_exec);
if (submit->submit->start_info->job_post_exec != NULL) {
job->job.submit->start_info->job_post_exec = create_obj_by_typename(
mgr, "xstring", submit->submit->start_info->job_post_exec);
}
}
@ -203,17 +216,14 @@ static void* xjob_create(objmgr_t* mgr, objtype_t* type, va_list ap)
MOVE_PTR(job->job.run_usage, submit->run_usage);
}
/* clang-format off */
if ((job->job.queue == NULL) ||
(job->job.user == NULL) ||
(job->job.job_name == NULL) ||
(job->job.start_info->cmdline == NULL) ||
(job->job.project_name == NULL) ||
(job->job.job_description == NULL) ||
(job->job.resreq == NULL)) {
/* clang-format on */
if ((job->job.submit->queue == NULL) || (job->job.submit->user == NULL)
|| (job->job.submit->job_name == NULL)
|| (job->job.submit->start_info->cmdline == NULL)
|| (job->job.submit->project_name == NULL)
|| (job->job.submit->job_description == NULL)
|| (job->job.submit->resreq == NULL)) {
FREEUP(job->job.start_info);
FREEUP(job->job.submit->start_info);
job_obj_killer(job);
@ -240,12 +250,12 @@ void job_obj_killer(job_t* job)
}
obj = TO_MYOBJ(job);
DEREF_OBJ(job->job.queue);
DEREF_OBJ(job->job.user);
DEREF_OBJ(job->job.job_name);
DEREF_OBJ(job->job.project_name);
DEREF_OBJ(job->job.job_description);
DEREF_OBJ(job->job.resreq);
DEREF_OBJ(job->job.submit->queue);
DEREF_OBJ(job->job.submit->user);
DEREF_OBJ(job->job.submit->job_name);
DEREF_OBJ(job->job.submit->project_name);
DEREF_OBJ(job->job.submit->job_description);
DEREF_OBJ(job->job.submit->resreq);
if (job->job.pidinfo != NULL) {
FREEUP(job->job.pidinfo->pids);
@ -285,16 +295,16 @@ void job_obj_killer(job_t* job)
FREEUP(job->job.run_usage);
}
if (job->job.start_info != NULL) {
DEREF_OBJ(job->job.start_info->cmdline);
DEREF_OBJ(job->job.start_info->exechome);
DEREF_OBJ(job->job.start_info->execcwd);
DEREF_OBJ(job->job.start_info->execuser);
DEREF_OBJ(job->job.start_info->exdata);
DEREF_OBJ(job->job.start_info->launch_type);
DEREF_OBJ(job->job.start_info->job_pre_exec);
DEREF_OBJ(job->job.start_info->job_post_exec);
FREEUP(job->job.start_info);
if (job->job.submit->start_info != NULL) {
DEREF_OBJ(job->job.submit->start_info->cmdline);
DEREF_OBJ(job->job.submit->start_info->exechome);
DEREF_OBJ(job->job.submit->start_info->execcwd);
DEREF_OBJ(job->job.submit->start_info->execuser);
DEREF_OBJ(job->job.submit->start_info->exdata);
DEREF_OBJ(job->job.submit->start_info->launch_type);
DEREF_OBJ(job->job.submit->start_info->job_pre_exec);
DEREF_OBJ(job->job.submit->start_info->job_post_exec);
FREEUP(job->job.submit->start_info);
}
FREEUP(job->job.exit_info);