From dc5f1eb1bf4efd027ca18c75d6cfedadefdc6c94 Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Thu, 13 Aug 2015 13:21:08 +0200 Subject: [PATCH 1/4] mxq_job: Treat job_status KILLING as RUNNING --- mxq_job.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mxq_job.c b/mxq_job.c index 1f909de..16a64af 100644 --- a/mxq_job.c +++ b/mxq_job.c @@ -486,7 +486,7 @@ int mxq_set_job_status_exited(struct mx_mysql *mysql, struct mxq_job *job) return -1; } - if (job->job_status != MXQ_JOB_STATUS_RUNNING) { + if (job->job_status != MXQ_JOB_STATUS_RUNNING && job->job_status != MXQ_JOB_STATUS_KILLING) { mx_log_warning("new status==exited but old status(=%d) is != running ", job->job_status); } @@ -510,7 +510,7 @@ int mxq_set_job_status_exited(struct mx_mysql *mysql, struct mxq_job *job) " stats_nvcsw = ?, " " stats_nivcsw = ?" " WHERE job_id = ?" - " AND job_status IN (" status_str(MXQ_JOB_STATUS_LOADED) ", " status_str(MXQ_JOB_STATUS_RUNNING) ")" + " AND job_status IN (" status_str(MXQ_JOB_STATUS_LOADED) ", " status_str(MXQ_JOB_STATUS_RUNNING) ", " status_str(MXQ_JOB_STATUS_KILLING) ")" " AND host_hostname = ?" " AND server_id = ?" " AND host_pid = ?"; @@ -567,7 +567,7 @@ int mxq_set_job_status_unknown_for_server(struct mx_mysql *mysql, char *hostname "UPDATE mxq_job SET" " job_status = " status_str(MXQ_JOB_STATUS_UNKNOWN) "," " date_end = NULL" - " WHERE job_status IN (" status_str(MXQ_JOB_STATUS_LOADED) "," status_str(MXQ_JOB_STATUS_RUNNING) ")" + " WHERE job_status IN (" status_str(MXQ_JOB_STATUS_LOADED) "," status_str(MXQ_JOB_STATUS_RUNNING) "," status_str(MXQ_JOB_STATUS_KILLING) ")" " AND host_hostname = ?" " AND server_id = ?"; From 3983a9e2182bd2087ed41f2c07ec8410d484a92e Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Thu, 13 Aug 2015 13:43:41 +0200 Subject: [PATCH 2/4] mxqkill: Allow cancellation of assigned jobs ASSIGNED -> CANCELLING -> CANCELLED ASSIGNED -> CANCELLED --- mxqkill.c | 4 ++-- mysql/create_tables.sql | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mxqkill.c b/mxqkill.c index 2c4eff3..4ebc288 100644 --- a/mxqkill.c +++ b/mxqkill.c @@ -133,7 +133,7 @@ static int update_job_status_cancelled_by_group(struct mx_mysql *mysql, struct m "UPDATE mxq_job SET" " job_status = " status_str(MXQ_JOB_STATUS_CANCELLED) " WHERE group_id = ?" - " AND job_status = " status_str(MXQ_JOB_STATUS_INQ) + " AND job_status = IN (" status_str(MXQ_JOB_STATUS_INQ) "," status_str(MXQ_JOB_STATUS_ASSIGNED) ")" " AND host_hostname = ''" " AND server_id = ''" " AND host_pid = 0" @@ -180,7 +180,7 @@ static int update_job_status_cancelling_by_job_id_for_user(struct mx_mysql *mysq " job_status = " status_str(MXQ_JOB_STATUS_CANCELLING) " WHERE job_id = ?" " AND user_uid = ?" - " AND job_status = " status_str(MXQ_JOB_STATUS_INQ) + " AND job_status IN (" status_str(MXQ_JOB_STATUS_INQ) "," status_str(MXQ_JOB_STATUS_ASSIGNED) ")" " AND host_hostname = ''" " AND server_id = ''" " AND host_pid = 0" diff --git a/mysql/create_tables.sql b/mysql/create_tables.sql index deeb890..3ce99fb 100644 --- a/mysql/create_tables.sql +++ b/mysql/create_tables.sql @@ -214,7 +214,7 @@ CREATE TRIGGER mxq_update_job BEFORE UPDATE ON mxq_job stats_total_real_sec=stats_total_real_sec+NEW.stats_real_sec, group_mtime=NULL WHERE group_id=NEW.group_id; - ELSEIF NEW.job_status = 990 AND OLD.job_status IN (0, 989) THEN + ELSEIF NEW.job_status = 990 AND OLD.job_status IN (0, 100, 989) THEN UPDATE mxq_group SET group_jobs_inq=group_jobs_inq-1, group_jobs_cancelled=group_jobs_cancelled+1, From 39ab9bf096384dbd615d722a3311a33e7929d8ff Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Tue, 18 Aug 2015 16:47:25 +0200 Subject: [PATCH 3/4] mxqkill: Fix error message --- mxqkill.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mxqkill.c b/mxqkill.c index 4ebc288..2d0b82d 100644 --- a/mxqkill.c +++ b/mxqkill.c @@ -450,7 +450,7 @@ int main(int argc, char *argv[]) mx_log_err("setting status of job %lu to CANCELLING failed: %s", arg_job_id, strerror(-res1)); if (res2 < 0) - mx_log_err("setting status of job %lu to CANCELLED failed: %s", arg_job_id, strerror(-res1)); + mx_log_err("setting status of job %lu to CANCELLED failed: %s", arg_job_id, strerror(-res2)); if (res2 > 0) { mx_log_notice("Job %lu cancelled!", arg_job_id); From 004f08487aa6e37d5d78aaeee81d21072e0ba194 Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Wed, 19 Aug 2015 16:49:59 +0200 Subject: [PATCH 4/4] mxqkill: Set date_start and date_end to NOW() when cancelling jobs --- mysql/create_tables.sql | 2 ++ mysql/fix_cancelled_job_dates.sql | 8 ++++++++ 2 files changed, 10 insertions(+) create mode 100644 mysql/fix_cancelled_job_dates.sql diff --git a/mysql/create_tables.sql b/mysql/create_tables.sql index 3ce99fb..d134ab5 100644 --- a/mysql/create_tables.sql +++ b/mysql/create_tables.sql @@ -215,6 +215,8 @@ CREATE TRIGGER mxq_update_job BEFORE UPDATE ON mxq_job group_mtime=NULL WHERE group_id=NEW.group_id; ELSEIF NEW.job_status = 990 AND OLD.job_status IN (0, 100, 989) THEN + SET NEW.date_start = NOW(); + SET NEW.date_end = NEW.date_start; UPDATE mxq_group SET group_jobs_inq=group_jobs_inq-1, group_jobs_cancelled=group_jobs_cancelled+1, diff --git a/mysql/fix_cancelled_job_dates.sql b/mysql/fix_cancelled_job_dates.sql new file mode 100644 index 0000000..4a93576 --- /dev/null +++ b/mysql/fix_cancelled_job_dates.sql @@ -0,0 +1,8 @@ +UPDATE mxq_job + JOIN mxq_group + ON mxq_job.group_id = mxq_group.group_id + SET mxq_job.date_start = mxq_group.group_date_end, + mxq_job.date_end = mxq_group.group_date_end + WHERE job_status = 990 + AND (date_start = 0 OR date_end = 0); +