From 44423dad7a3d88f0897af113e60df52d457bd886 Mon Sep 17 00:00:00 2001
From: Danny Auble <da@schedmd.com>
Date: Fri, 26 May 2017 15:04:42 -0600
Subject: [PATCH] Add function to determine if a job is held by a QOS GRP
 limit.

---
 src/common/slurm_protocol_defs.c | 21 +++++++++++++++++++++
 src/common/slurm_protocol_defs.h |  1 +
 2 files changed, 22 insertions(+)

diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c
index 5c7437dff9a..f106d3013cf 100644
--- a/src/common/slurm_protocol_defs.c
+++ b/src/common/slurm_protocol_defs.c
@@ -1862,6 +1862,27 @@ extern char *job_reason_string(enum job_state_reason inx)
 	}
 }
 
+/* If the job is held up by a QOS GRP limit return true else return false. */
+extern bool job_state_qos_grp_limit(enum job_state_reason state_reason)
+{
+	if ((state_reason >= WAIT_QOS_GRP_CPU &&
+	     state_reason <= WAIT_QOS_GRP_WALL) ||
+	    (state_reason == WAIT_QOS_GRP_MEM_MIN) ||
+	    (state_reason == WAIT_QOS_GRP_MEM_RUN_MIN) ||
+	    (state_reason >= WAIT_QOS_GRP_ENERGY &&
+	     state_reason <= WAIT_QOS_GRP_ENERGY_RUN_MIN) ||
+	    (state_reason == WAIT_QOS_GRP_NODE_MIN) ||
+	    (state_reason == WAIT_QOS_GRP_NODE_RUN_MIN) ||
+	    (state_reason >= WAIT_QOS_GRP_GRES &&
+	     state_reason <= WAIT_QOS_GRP_GRES_RUN_MIN) ||
+	    (state_reason >= WAIT_QOS_GRP_LIC &&
+	     state_reason <= WAIT_QOS_GRP_LIC_RUN_MIN) ||
+	    (state_reason >= WAIT_QOS_GRP_BB &&
+	     state_reason <= WAIT_QOS_GRP_BB_RUN_MIN))
+		return true;
+	return false;
+}
+
 extern void slurm_free_get_kvs_msg(kvs_get_msg_t *msg)
 {
 	if (msg) {
diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h
index 81b40cdd48a..286461d1bb8 100644
--- a/src/common/slurm_protocol_defs.h
+++ b/src/common/slurm_protocol_defs.h
@@ -1478,6 +1478,7 @@ extern uint16_t bb_state_num(char *tok);
 extern char *health_check_node_state_str(uint32_t node_state);
 
 extern char *job_reason_string(enum job_state_reason inx);
+extern bool job_state_qos_grp_limit(enum job_state_reason state_reason);
 extern char *job_share_string(uint16_t shared);
 extern char *job_state_string(uint32_t inx);
 extern char *job_state_string_compact(uint32_t inx);
-- 
GitLab