diff --git a/doc/html/accounting.shtml b/doc/html/accounting.shtml index b1c1031a3309761751356536c77758b62ee68ae1..7447c02352e50d775e349b95e018364c8ece3abf 100644 --- a/doc/html/accounting.shtml +++ b/doc/html/accounting.shtml @@ -226,6 +226,11 @@ prevent users from accessing invalid accounts. <li>limits - This will enforce limits set to associations. By setting this option, the 'associations' option is also set. </li> +<li>qos - This will require all jobs to specify (either overtly or by +default) a valid qos (Quality of Service). QOS values are defined for +each association in the database. By setting this option, the +'associations' option is also set. +</li> <li>wckeys - This will prevent users from running jobs under a wckey that they don't have access to. By using this option, the 'associations' option is also set. The 'TrackWCKey' option is also diff --git a/doc/html/accounting_storageplugins.shtml b/doc/html/accounting_storageplugins.shtml index 7bdac1ae5329c866c607cf7f2ffa0ddfc7f3a719..ebe7221031a708700bb761a12bc76dca22a091c6 100644 --- a/doc/html/accounting_storageplugins.shtml +++ b/doc/html/accounting_storageplugins.shtml @@ -912,8 +912,8 @@ database with. <dt><span class="commandline">AccountingStorageEnforce</span> <dd>Specifies if we should enforce certain things be in existence before allowing job submissions and such valid options are - "associations, limits, and wckeys". You can use any combination of - those listed. + "associations, limits, qos, and wckeys". You can use any combination + of those listed. </dl> <h2>Versioning</h2> diff --git a/doc/html/resource_limits.shtml b/doc/html/resource_limits.shtml index afcb619afe1d367054ffa93b09945970f0a9f493..a2e3469ffdf4b4b6a4368356dd82d1ec2442ac58 100644 --- a/doc/html/resource_limits.shtml +++ b/doc/html/resource_limits.shtml @@ -52,6 +52,11 @@ prevent users from accessing invalid accounts. <li>limits - This will enforce limits set to associations. By setting this option, the 'associations' option is also set. </li> +<li>qos - This will require all jobs to specify (either overtly or by +default) a valid qos (Quality of Service). QOS values are defined for +each association in the database. By setting this option, the +'associations' option is also set. +</li> <li>wckeys - This will prevent users from running jobs under a wckey that they don't have access to. By using this option, the 'associations' option is also set. The 'TrackWCKey' option is also diff --git a/doc/man/man1/salloc.1 b/doc/man/man1/salloc.1 index 27129c3ab9b0613bfed33cd0524934d34ba662db..32de207275ec64c788e2c4a509e36ef0d680e784 100644 --- a/doc/man/man1/salloc.1 +++ b/doc/man/man1/salloc.1 @@ -709,6 +709,14 @@ partition as designated by the system administrator. \fB\-Q\fR, \fB\-\-quiet\fR Suppress informational messages from salloc. Errors will still be displayed. +.TP +\fB\-\-qos\fR=<\fIqos\fR> +Request a quality of service for the job. QOS values can be defined +for each user/cluster/account association in the SLURM database. +Users will be limited to their association's defined set of qos's when +the SLURM configuration parameter, AccountingStorageEnforce, is set to +"qos". + .TP \fB\-\-reservation\fR=<\fIname\fR> Allocate resources for the job from the named reservation. diff --git a/doc/man/man1/sbatch.1 b/doc/man/man1/sbatch.1 index 4ba28c461281938a299d24b3af935ec020671ca8..e6b7234c4f876d12ea44b8346ec782691535d25a 100644 --- a/doc/man/man1/sbatch.1 +++ b/doc/man/man1/sbatch.1 @@ -796,6 +796,14 @@ The maximum stack size \fB\-Q\fR, \fB\-\-quiet\fR Suppress informational messages from sbatch. Errors will still be displayed. +.TP +\fB\-\-qos\fR=<\fIqos\fR> +Request a quality of service for the job. QOS values can be defined +for each user/cluster/account association in the SLURM database. +Users will be limited to their association's defined set of qos's when +the SLURM configuration parameter, AccountingStorageEnforce, is set to +"qos". + .TP \fB\-\-requeue\fR Specifies that the batch job should be requeued after node failure. diff --git a/doc/man/man1/srun.1 b/doc/man/man1/srun.1 index cd3266d164c33fc6ea420df31a20025d21bb1aa5..997f7d1f77417559ef6dfb4dc896a28d08110d78 100644 --- a/doc/man/man1/srun.1 +++ b/doc/man/man1/srun.1 @@ -884,6 +884,14 @@ disables the status feature normally available when \fBsrun\fR receives a single Ctrl\-C and causes \fBsrun\fR to instead immediately terminate the running job. +.TP +\fB\-\-qos\fR=<\fIqos\fR> +Request a quality of service for the job. QOS values can be defined +for each user/cluster/account association in the SLURM database. +Users will be limited to their association's defined set of qos's when +the SLURM configuration parameter, AccountingStorageEnforce, is set to +"qos". + .TP \fB\-r\fR, \fB\-\-relative\fR=<\fIn\fR> Run a job step relative to node \fIn\fR of the current allocation. diff --git a/src/api/job_info.c b/src/api/job_info.c index a2679fe7b03a2623718ed9833a79be4d3cddb3fc..61bf810097b0c37d4fe1b14e2c5e96b67ca70678 100644 --- a/src/api/job_info.c +++ b/src/api/job_info.c @@ -522,9 +522,8 @@ line7: /****** Line 7 ******/ /****** Line 11 ******/ snprintf(tmp_line, sizeof(tmp_line), - "Dependency=%s Account=%s Requeue=%u Restarts=%u", - job_ptr->dependency, job_ptr->account, job_ptr->requeue, - job_ptr->restart_cnt); + "Dependency=%s Requeue=%u Restarts=%u", + job_ptr->dependency, job_ptr->requeue, job_ptr->restart_cnt); xstrcat(out, tmp_line); if (one_liner) xstrcat(out, " "); @@ -532,6 +531,16 @@ line7: /****** Line 7 ******/ xstrcat(out, "\n "); /****** Line 12 ******/ + snprintf(tmp_line, sizeof(tmp_line), + "Account=%s QOS=%s", + job_ptr->account, job_ptr->qos); + xstrcat(out, tmp_line); + if (one_liner) + xstrcat(out, " "); + else + xstrcat(out, "\n "); + + /****** Line 13 ******/ if (job_ptr->state_desc) { /* Replace white space with underscore for easier parsing */ for (j=0; job_ptr->state_desc[j]; j++) { @@ -550,7 +559,7 @@ line7: /****** Line 7 ******/ else xstrcat(out, "\n "); - /****** Line 13 ******/ + /****** Line 14 ******/ snprintf(tmp_line, sizeof(tmp_line), "Req%s=%s Req%sIndices=", nodelist, job_ptr->req_nodes, nodelist); xstrcat(out, tmp_line); @@ -567,7 +576,7 @@ line7: /****** Line 7 ******/ else xstrcat(out, "\n "); - /****** Line 14 ******/ + /****** Line 15 ******/ snprintf(tmp_line, sizeof(tmp_line), "Exc%s=%s Exc%sIndices=", nodelist, job_ptr->exc_nodes, nodelist); xstrcat(out, tmp_line); @@ -584,7 +593,7 @@ line7: /****** Line 7 ******/ else xstrcat(out, "\n "); - /****** Line 15 ******/ + /****** Line 16 ******/ slurm_make_time_str((time_t *)&job_ptr->submit_time, time_str, sizeof(time_str)); snprintf(tmp_line, sizeof(tmp_line), "SubmitTime=%s ", @@ -600,7 +609,7 @@ line7: /****** Line 7 ******/ time_str, (long int)job_ptr->pre_sus_time); xstrcat(out, tmp_line); - /****** Lines 16, 17 (optional, batch only) ******/ + /****** Lines 17, 18 (optional, batch only) ******/ if (job_ptr->batch_flag) { if (one_liner) xstrcat(out, " "); @@ -617,7 +626,7 @@ line7: /****** Line 7 ******/ xstrcat(out, tmp_line); } - /****** Line 18 (optional) ******/ + /****** Line 19 (optional) ******/ if (job_ptr->comment) { if (one_liner) xstrcat(out, " "); @@ -628,7 +637,7 @@ line7: /****** Line 7 ******/ xstrcat(out, tmp_line); } - /****** Line 19 (optional) ******/ + /****** Line 20 (optional) ******/ select_g_select_jobinfo_sprint(job_ptr->select_jobinfo, select_buf, sizeof(select_buf), SELECT_PRINT_MIXED); @@ -640,7 +649,7 @@ line7: /****** Line 7 ******/ xstrcat(out, select_buf); } #ifdef HAVE_BG - /****** Line 20 (optional) ******/ + /****** Line 21 (optional) ******/ select_g_select_jobinfo_sprint(job_ptr->select_jobinfo, select_buf, sizeof(select_buf), SELECT_PRINT_BLRTS_IMAGE); @@ -653,7 +662,7 @@ line7: /****** Line 7 ******/ "BlrtsImage=%s", select_buf); xstrcat(out, tmp_line); } - /****** Line 21 (optional) ******/ + /****** Line 22 (optional) ******/ select_g_select_jobinfo_sprint(job_ptr->select_jobinfo, select_buf, sizeof(select_buf), SELECT_PRINT_LINUX_IMAGE); @@ -671,7 +680,7 @@ line7: /****** Line 7 ******/ #endif xstrcat(out, tmp_line); } - /****** Line 22 (optional) ******/ + /****** Line 23 (optional) ******/ select_g_select_jobinfo_sprint(job_ptr->select_jobinfo, select_buf, sizeof(select_buf), SELECT_PRINT_MLOADER_IMAGE); @@ -684,7 +693,7 @@ line7: /****** Line 7 ******/ "MloaderImage=%s", select_buf); xstrcat(out, tmp_line); } - /****** Line 23 (optional) ******/ + /****** Line 24 (optional) ******/ select_g_select_jobinfo_sprint(job_ptr->select_jobinfo, select_buf, sizeof(select_buf), SELECT_PRINT_RAMDISK_IMAGE); diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index 6db15a84cb62c85f47a92c1bec72356c7e675518..534622158ee0c33173c43e98b78611b7928dfea6 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -4198,7 +4198,11 @@ void pack_job(struct job_record *dump_job_ptr, uint16_t show_flags, Buf buffer) packstr(dump_job_ptr->comment, buffer); slurm_mutex_lock(&assoc_mgr_qos_lock); - packstr(acct_qos_str(assoc_mgr_qos_list, dump_job_ptr->qos), buffer); + if (assoc_mgr_qos_list) + packstr(acct_qos_str(assoc_mgr_qos_list, dump_job_ptr->qos), + buffer); + else + packstr(NULL, buffer); slurm_mutex_unlock(&assoc_mgr_qos_lock); packstr(dump_job_ptr->licenses, buffer);