job submit and support run in worker
This commit is contained in:
parent
3630e38a07
commit
e497dd1b69
18 changed files with 502 additions and 236 deletions
|
|
@ -16,32 +16,61 @@ static int mark_job_update(cluster_t*, job_t*, int);
|
|||
|
||||
uint64_t jobid = 100;
|
||||
|
||||
static job_t* create_job(cluster_t* c, uint64_t jobid, char* queue, char* user,
|
||||
char* exechome, char* execcwd, char* execuser,
|
||||
char* cmdline, char* exdata, uint32_t mintasks,
|
||||
uint32_t maxtasks)
|
||||
static job_t* create_job(cluster_t* c, xce_job_t* j)
|
||||
{
|
||||
job_t* job = NULL;
|
||||
job_t* job = NULL;
|
||||
static int typeid = -1;
|
||||
|
||||
if (typeid < 0) {
|
||||
typeid = typeid_of_name(&(c->objmgr), "xjob");
|
||||
TRACE("%s type %s id %d", __func__, "xjob", typeid);
|
||||
}
|
||||
|
||||
if (typeid < 0) {
|
||||
SET_ERROR(-typeid);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
job = create_obj_by_typeid(&(c->objmgr), typeid, j);
|
||||
|
||||
return job;
|
||||
}
|
||||
|
||||
uint64_t job_submit(void* c, char* user, char* queue, char* resreq,
|
||||
char* cmdline, char* exdata, uint32_t mintasks,
|
||||
uint32_t maxtasks)
|
||||
uint64_t job_submit(void* c, xce_job_submit_t* submit)
|
||||
{
|
||||
job_t* job = NULL;
|
||||
job_t* job = NULL;
|
||||
uint64_t base_id = submit->jobid;
|
||||
xce_job_t j = { .submit = submit->submit };
|
||||
time_t now = time(NULL);
|
||||
int i;
|
||||
|
||||
job = create_job(c, jobid++, queue, user, "/tmp", "/tmp", user, cmdline,
|
||||
exdata, mintasks, maxtasks);
|
||||
if (job == NULL) {
|
||||
return -errno;
|
||||
j.sub_time = now;
|
||||
j.queue_time = now;
|
||||
j.start_time = 0;
|
||||
j.finish_time = 0;
|
||||
j.pidinfo = NULL;
|
||||
j.state = JOB_STAT_PEND;
|
||||
j.allocs = NULL;
|
||||
j.run_time = 0;
|
||||
j.run_usage = NULL;
|
||||
j.exit_info = NULL;
|
||||
j.ckptinfo = NULL;
|
||||
j.pending_ctrl = 0;
|
||||
|
||||
for (i = 0; i < submit->array_size; i++) {
|
||||
j.jobid = base_id + i;
|
||||
job = create_job(c, &j);
|
||||
if (job == NULL) {
|
||||
return -errno;
|
||||
}
|
||||
}
|
||||
|
||||
return job->job.jobid;
|
||||
return base_id;
|
||||
}
|
||||
|
||||
int load_jobs(void* c)
|
||||
{
|
||||
#if 0
|
||||
job_t* job;
|
||||
int i;
|
||||
char cmdline[1024];
|
||||
|
|
@ -62,6 +91,7 @@ int load_jobs(void* c)
|
|||
return -errno;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -181,27 +211,27 @@ static int dispatch_a_job_(cluster_t* c, endpoint_t* ep, xce_job_alloc_t* alloc)
|
|||
char* q_pre_exec;
|
||||
char* q_post_exec;
|
||||
|
||||
rc = get_queue_exec(c, j->job.queue, &q_pre_exec, &q_post_exec);
|
||||
rc = get_queue_exec(c, j->job.submit->queue, &q_pre_exec, &q_post_exec);
|
||||
if (rc < 0) {
|
||||
obj_deref(j);
|
||||
obj_deref(w);
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (j->job.start_info->q_pre_exec != NULL) {
|
||||
obj_deref(j->job.start_info->q_pre_exec);
|
||||
if (j->job.submit->start_info->q_pre_exec != NULL) {
|
||||
obj_deref(j->job.submit->start_info->q_pre_exec);
|
||||
}
|
||||
|
||||
if (j->job.start_info->q_post_exec != NULL) {
|
||||
obj_deref(j->job.start_info->q_post_exec);
|
||||
if (j->job.submit->start_info->q_post_exec != NULL) {
|
||||
obj_deref(j->job.submit->start_info->q_post_exec);
|
||||
}
|
||||
|
||||
j->job.start_info->q_pre_exec = q_pre_exec;
|
||||
j->job.start_info->q_post_exec = q_post_exec;
|
||||
j->job.submit->start_info->q_pre_exec = q_pre_exec;
|
||||
j->job.submit->start_info->q_post_exec = q_post_exec;
|
||||
}
|
||||
|
||||
einfo.jobid = alloc->jobid;
|
||||
einfo.start_info = j->job.start_info;
|
||||
einfo.start_info = j->job.submit->start_info;
|
||||
einfo.launchinfo = &launchinfo;
|
||||
|
||||
rc = xce_startjob_req(w->ep, &einfo);
|
||||
|
|
@ -398,18 +428,16 @@ int handle_jobsubmit(cluster_t* c, endpoint_t* ep, xce_request_t* request)
|
|||
|
||||
init_reply_by_req(&reply, request);
|
||||
|
||||
if (NULLSTR(submit->user) || NULLSTR(submit->queue)
|
||||
|| NULLSTR(submit->cmdline)) {
|
||||
if (NULLSTR(submit->submit->user) || NULLSTR(submit->submit->queue)
|
||||
|| (submit->submit->start_info == NULL)
|
||||
|| NULLSTR(submit->submit->start_info->cmdline)) {
|
||||
jobid = 0;
|
||||
errno = EINVAL;
|
||||
} else {
|
||||
xce_run_hooks(&(c->hooksys), XCE_CONTROLLER_HOOK_JOB, HOOK_BEFORE_EVENT,
|
||||
HOOK_DETAIL_JOB_NEW, c, submit);
|
||||
|
||||
jobid = job_submit(c, (char*)submit->user, (char*)submit->queue,
|
||||
(char*)submit->resreq, (char*)submit->cmdline,
|
||||
(char*)submit->exdata, submit->mintasks,
|
||||
submit->maxtasks);
|
||||
jobid = job_submit(c, submit);
|
||||
}
|
||||
if (jobid == 0) {
|
||||
reply.status = -errno;
|
||||
|
|
|
|||
|
|
@ -43,7 +43,13 @@ readline_dep = dependency('readline')
|
|||
ncurses_dep = dependency('ncurses')
|
||||
history_dep = dependency('history')
|
||||
|
||||
xce_test_deps = [libxce_dep, readline_dep, history_dep, ncurses_dep]
|
||||
xce_test_deps = [
|
||||
libxce_dep,
|
||||
libcjson_dep,
|
||||
readline_dep,
|
||||
history_dep,
|
||||
ncurses_dep
|
||||
]
|
||||
xce_test = executable('xce_test',
|
||||
xce_test_src,
|
||||
include_directories: [incdir],
|
||||
|
|
|
|||
|
|
@ -12,8 +12,11 @@
|
|||
#include <readline/history.h>
|
||||
#include <readline/readline.h>
|
||||
|
||||
#include <cjson/cJSON.h>
|
||||
|
||||
#include "client.h"
|
||||
#include "controller.capnp.h"
|
||||
#include "idgen.h"
|
||||
#include "xce/types.h"
|
||||
|
||||
typedef int (*cmd_func_t)(int, char*[]);
|
||||
|
|
@ -97,7 +100,8 @@ static void handler(int, siginfo_t*, void*);
|
|||
#define CLOCKID CLOCK_REALTIME
|
||||
#define SIG SIGRTMIN
|
||||
|
||||
static timer_t timerid;
|
||||
static timer_t timerid;
|
||||
static idgen_ctx_t idctx;
|
||||
|
||||
static setting_t settings[] = {
|
||||
{ (char*)"host", (char*)NULL, (char*)"localhost" },
|
||||
|
|
@ -562,12 +566,12 @@ int cmd_workerlist(int argc, char* argv[])
|
|||
return rc;
|
||||
}
|
||||
|
||||
printf("%-20s%-8s%-15s%-15s%12s%12s%12s%12s%12s%12s\n", "HostName",
|
||||
printf("%-20s%-8s%-25s%-25s%12s%12s%12s%12s%12s%12s\n", "HostName",
|
||||
"Status", "HostType", "HostModel", "CPUfactor", "MaxCPU", "MaxMem",
|
||||
"MaxSwap", "MaxTmp", "NDisks");
|
||||
|
||||
for (i = 0; i < rc; i++) {
|
||||
printf("%-20s%-8s%-15s%-15s%12f%12d%12f%12f%12f%12d\n",
|
||||
printf("%-20s%-8s%-25s%-25s%12f%12d%12f%12f%12f%12d\n",
|
||||
workers[i]->name, worker_status_str(workers[i]->status),
|
||||
workers[i]->attrs->hosttype, workers[i]->attrs->hostmodel,
|
||||
workers[i]->attrs->cpufactor, workers[i]->attrs->maxcpus,
|
||||
|
|
@ -619,16 +623,21 @@ int cmd_joblist(int argc, char* argv[])
|
|||
return rc;
|
||||
}
|
||||
|
||||
printf("%-16s%-10s%-10s%-8s%-16s%-16s%-16s%10s%30s\n", "JobId", "User",
|
||||
printf("%-26s%-10s%-10s%-8s%-16s%-16s%-16s%10s%30s\n", "JobId", "User",
|
||||
"Queue", "State", "SubmitTime", "StartTime", "FinishTime", "NTasks",
|
||||
"Command");
|
||||
|
||||
for (i = 0; i < rc; i++) {
|
||||
printf("%-16ld%-10s%-10s%-8s%-16ld%-16ld%-16ld%4d,%-5d%30s\n",
|
||||
jobs[i]->jobid, jobs[i]->user, jobs[i]->queue,
|
||||
char buf[128];
|
||||
|
||||
fmt_jobid(buf, sizeof(buf) - 1, jobs[i]->jobid);
|
||||
|
||||
printf("%-26s%-10s%-10s%-8s%-16ld%-16ld%-16ld%4d,%-5d%30s\n", buf,
|
||||
jobs[i]->submit->user, jobs[i]->submit->queue,
|
||||
job_state_str(jobs[i]->state), jobs[i]->queue_time,
|
||||
jobs[i]->start_time, jobs[i]->finish_time, jobs[i]->mintasks,
|
||||
jobs[i]->maxtasks, jobs[i]->start_info->cmdline);
|
||||
jobs[i]->start_time, jobs[i]->finish_time,
|
||||
jobs[i]->submit->mintasks, jobs[i]->submit->maxtasks,
|
||||
jobs[i]->submit->start_info->cmdline);
|
||||
}
|
||||
|
||||
free(jobs);
|
||||
|
|
@ -723,7 +732,7 @@ int cmd_jobrun(int argc, char* argv[])
|
|||
nhosts++;
|
||||
break;
|
||||
case 'j':
|
||||
jobid = atol(optarg);
|
||||
parse_jobid(&jobid, optarg);
|
||||
if (jobid == 0) {
|
||||
printf("you need to specify a positive jobid with -j");
|
||||
return -1;
|
||||
|
|
@ -756,19 +765,76 @@ int cmd_jobrun(int argc, char* argv[])
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int build_job_envs(xce_job_submit_t* submit)
|
||||
{
|
||||
char* names[] = { "PATH", "LSAN_OPTIONS", NULL };
|
||||
int i;
|
||||
cJSON* top;
|
||||
cJSON* envars;
|
||||
char* exdata;
|
||||
|
||||
top = cJSON_CreateObject();
|
||||
if (top == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
envars = cJSON_CreateObject();
|
||||
if (envars == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
cJSON_AddItemToObject(top, "sub_env_vars", envars);
|
||||
|
||||
for (i = 0; names[i] != NULL; i++) {
|
||||
cJSON* val;
|
||||
char* s = getenv(names[i]);
|
||||
|
||||
if (s == NULL) {
|
||||
s = "";
|
||||
}
|
||||
|
||||
val = cJSON_CreateString(s);
|
||||
cJSON_AddItemToObject(envars, names[i], val);
|
||||
}
|
||||
|
||||
exdata = cJSON_Print(top);
|
||||
|
||||
submit->submit->start_info->exdata = exdata;
|
||||
|
||||
cJSON_Delete(top);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int build_job_exdata(xce_job_submit_t* submit)
|
||||
{
|
||||
build_job_envs(submit);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cmd_jobsub(int argc, char* argv[])
|
||||
{
|
||||
int rc = 0;
|
||||
xce_job_submit_t submit;
|
||||
int opt;
|
||||
uint64_t jobid;
|
||||
uint32_t min = 1, max = 1;
|
||||
int rc = 0;
|
||||
job_submit_data_t submit;
|
||||
xce_job_submit_t jobsubmit = { .submit = &submit };
|
||||
int opt;
|
||||
uint64_t jobid;
|
||||
uint32_t min = 1, max = 1;
|
||||
uint32_t arsize = 1;
|
||||
char jobidStr[128];
|
||||
|
||||
optind = 1;
|
||||
|
||||
memset(&submit, 0x0, sizeof(submit));
|
||||
submit.start_info
|
||||
= (job_startinfo_t*)calloc(1, sizeof(*(submit.start_info)));
|
||||
if (submit.start_info == NULL) {
|
||||
perror("calloc");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
while ((opt = getopt(argc, argv, "u:q:R:c:x:n:")) != -1) {
|
||||
while ((opt = getopt(argc, argv, "u:q:R:c:x:n:a:")) != -1) {
|
||||
switch (opt) {
|
||||
case 'u':
|
||||
submit.user = strdup(optarg);
|
||||
|
|
@ -780,10 +846,10 @@ int cmd_jobsub(int argc, char* argv[])
|
|||
submit.resreq = strdup(optarg);
|
||||
break;
|
||||
case 'c':
|
||||
submit.cmdline = strdup(optarg);
|
||||
submit.start_info->cmdline = strdup(optarg);
|
||||
break;
|
||||
case 'x':
|
||||
submit.exdata = strdup(optarg);
|
||||
submit.start_info->exdata = strdup(optarg);
|
||||
break;
|
||||
case 'n':
|
||||
if (strchr(optarg, (int)',') != NULL) {
|
||||
|
|
@ -805,6 +871,12 @@ int cmd_jobsub(int argc, char* argv[])
|
|||
max = min;
|
||||
}
|
||||
break;
|
||||
case 'a':
|
||||
arsize = atoi(optarg);
|
||||
if (arsize <= 0) {
|
||||
arsize = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf(
|
||||
"jobsub -u <user> -q <queue> -R <resreq> -c <command line>\n");
|
||||
|
|
@ -827,7 +899,7 @@ int cmd_jobsub(int argc, char* argv[])
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (NULLSTR(submit.cmdline)) {
|
||||
if (NULLSTR(submit.start_info->cmdline)) {
|
||||
printf("you need to specify job command with -c\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
@ -839,7 +911,24 @@ int cmd_jobsub(int argc, char* argv[])
|
|||
submit.mintasks = min;
|
||||
submit.maxtasks = max;
|
||||
|
||||
rc = xcecli_jobsubmit(active_ctx->ctx, &submit, &jobid);
|
||||
idgen(&idctx, 0, 0, arsize, &(jobsubmit.jobid));
|
||||
|
||||
if (NULLSTR(submit.start_info->execuser)) {
|
||||
submit.start_info->execuser = strdup(submit.user);
|
||||
}
|
||||
|
||||
if (NULLSTR(submit.start_info->exechome)) {
|
||||
submit.start_info->exechome = strdup("/tmp");
|
||||
}
|
||||
|
||||
if (NULLSTR(submit.start_info->execcwd)) {
|
||||
submit.start_info->execcwd = strdup("/tmp");
|
||||
}
|
||||
|
||||
build_job_exdata(&jobsubmit);
|
||||
|
||||
jobsubmit.array_size = arsize;
|
||||
rc = xcecli_jobsubmit(active_ctx->ctx, &jobsubmit, &jobid);
|
||||
if (rc < 0) {
|
||||
SET_ERROR(-rc);
|
||||
perror("xcecli_jobsubmit");
|
||||
|
|
@ -849,10 +938,13 @@ int cmd_jobsub(int argc, char* argv[])
|
|||
FREEUP(submit.user);
|
||||
FREEUP(submit.queue);
|
||||
FREEUP(submit.resreq);
|
||||
FREEUP(submit.cmdline);
|
||||
FREEUP(submit.exdata);
|
||||
FREEUP(submit.start_info->cmdline);
|
||||
FREEUP(submit.start_info->exdata);
|
||||
FREEUP(submit.start_info);
|
||||
|
||||
printf("jobsubmit ok: JobId: %lu\n", jobid);
|
||||
fmt_jobid(jobidStr, sizeof(jobidStr) - 1, array_jobid(jobid));
|
||||
|
||||
printf("jobsubmit ok: JobId: %s\n", jobidStr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -940,7 +1032,7 @@ int cmd_jobkill(int argc, char* argv[])
|
|||
signo = atoi(optarg);
|
||||
break;
|
||||
case 'j':
|
||||
jobid = atol(optarg);
|
||||
parse_jobid(&jobid, optarg);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -986,7 +1078,7 @@ int cmd_jobckpt(int argc, char* argv[])
|
|||
ckptoption.kill = 1;
|
||||
break;
|
||||
case 'j':
|
||||
jobid = atol(optarg);
|
||||
parse_jobid(&jobid, optarg);
|
||||
break;
|
||||
case 'm':
|
||||
ckptoption.method = optarg;
|
||||
|
|
@ -1146,7 +1238,7 @@ int cmd_runtasks(int argc, char* argv[])
|
|||
dir = strdup(optarg);
|
||||
break;
|
||||
case 'j':
|
||||
jobid = atol(optarg);
|
||||
parse_jobid(&jobid, optarg);
|
||||
break;
|
||||
case 't':
|
||||
launch_type = strdup(optarg);
|
||||
|
|
@ -1268,7 +1360,7 @@ int cmd_jobfinish(int argc, char* argv[])
|
|||
while ((opt = getopt(argc, argv, "j:c:")) != -1) {
|
||||
switch (opt) {
|
||||
case 'j':
|
||||
jobid = atol(optarg);
|
||||
parse_jobid(&jobid, optarg);
|
||||
break;
|
||||
case 'c':
|
||||
code = atoi(optarg);
|
||||
|
|
@ -2242,6 +2334,8 @@ int main(int argc, char* argv[])
|
|||
memset(&run_jobs, 0x0, sizeof(run_jobs));
|
||||
memset(&run_tasks, 0x0, sizeof(run_tasks));
|
||||
|
||||
idgen_ctx_init(&idctx);
|
||||
|
||||
while (!done) {
|
||||
char* s;
|
||||
int rc;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue