Skip to content

0.30.3 #126

Merged
merged 16 commits into from
Mar 22, 2022
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Prev Previous commit
Next Next commit
mxqd: Add function can_start_job
Factor out reusable code into new function can_start_job.
donald committed Mar 20, 2022
commit e59288f6b2b04d4e0d26c115e414c50170d48844
47 changes: 23 additions & 24 deletions mxqd.c
Original file line number Diff line number Diff line change
@@ -1411,6 +1411,23 @@ unsigned long start_job(struct mxq_group_list *glist)
return 1;
}

static int can_start_job(struct mxq_group_list *group, unsigned long df_scratch, struct mxq_server *server, long slots_to_start) {
/* Can we start a(nother) job from this group */
if (group->jobs_running >= group->group.group_jobs)
return 0;
if (group->jobs_running >= group->jobs_max)
return 0;
if (mxq_group_jobs_inq(&group->group) == 0)
return 0;
if (group->slots_per_job > slots_to_start)
return 0;
if (df_scratch/1024/1024/1024 < group->group.job_tmpdir_size + 20)
return 0;
if (group->group.job_gpu && server->daemon.gpus_max - server->daemon.gpus_used == 0)
return 0;
return 1;
}

unsigned long start_user(struct mxq_user_list *ulist, long slots_to_start)
{
struct mxq_server *server;
@@ -1438,31 +1455,13 @@ unsigned long start_user(struct mxq_user_list *ulist, long slots_to_start)

group = &glist->group;

if (glist->jobs_running >= group->group_jobs) {
continue;
}
if (glist->jobs_running >= glist->jobs_max) {
continue;
}
if (mxq_group_jobs_inq(group) == 0) {
continue;
}
if (glist->slots_per_job > slots_to_start) {
continue;
}
if (df_scratch/1024/1024/1024 < group->job_tmpdir_size + 20) {
continue;
}
if (group->job_gpu && server->daemon.gpus_max - server->daemon.gpus_used == 0) {
continue;
}

mx_log_info(" group=%s(%d):%lu slots_to_start=%ld slots_per_job=%lu :: trying to start job for group.",
if (can_start_job(glist, df_scratch, server, slots_to_start)) {
mx_log_info(" group=%s(%d):%lu slots_to_start=%ld slots_per_job=%lu :: trying to start job for group.",
group->user_name, group->user_uid, group->group_id, slots_to_start, glist->slots_per_job);

if (start_job(glist)) {
int slots_started = glist->slots_per_job;
return slots_started;
if (start_job(glist)) {
int slots_started = glist->slots_per_job;
return slots_started;
}
}
}
return 0;