diff --git a/src/common/slurm_accounting_storage.c b/src/common/slurm_accounting_storage.c index d892b7c6b132d28a0e372d43e4c12504d7de506d..c520aab1b6819462fae7f7b315a7be5b5dc0160d 100644 --- a/src/common/slurm_accounting_storage.c +++ b/src/common/slurm_accounting_storage.c @@ -750,6 +750,8 @@ extern void destroy_acct_event_cond(void *object) list_destroy(acct_event->node_list); if(acct_event->reason_list) list_destroy(acct_event->reason_list); + if(acct_event->reason_uid_list) + list_destroy(acct_event->reason_uid_list); if(acct_event->state_list) list_destroy(acct_event->state_list); xfree(acct_event); @@ -5101,6 +5103,7 @@ extern void pack_acct_event_cond(void *in, uint16_t rpc_version, Buf buffer) pack_time(0, buffer); pack32(NO_VAL, buffer); pack32(NO_VAL, buffer); + pack32(NO_VAL, buffer); return; } @@ -5150,6 +5153,19 @@ extern void pack_acct_event_cond(void *in, uint16_t rpc_version, Buf buffer) } count = NO_VAL; + if(object->reason_uid_list) + count = list_count(object->reason_uid_list); + + pack32(count, buffer); + if(count && count != NO_VAL) { + itr = list_iterator_create(object->reason_uid_list); + while((tmp_info = list_next(itr))) { + packstr(tmp_info, buffer); + } + list_iterator_destroy(itr); + } + count = NO_VAL; + if(object->state_list) count = list_count(object->state_list); @@ -5211,6 +5227,16 @@ extern int unpack_acct_event_cond(void **object, uint16_t rpc_version, } } + safe_unpack32(&count, buffer); + if(count != NO_VAL) { + object_ptr->reason_uid_list = list_create(slurm_destroy_char); + for(i=0; i<count; i++) { + safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, + buffer); + list_append(object_ptr->reason_uid_list, tmp_info); + } + } + safe_unpack32(&count, buffer); if(count != NO_VAL) { object_ptr->state_list = list_create(slurm_destroy_char); diff --git a/src/common/slurm_accounting_storage.h b/src/common/slurm_accounting_storage.h index 975a01461f2f4177b303ad2e6c0238b475963c43..c5d8127976675aa6704e2393404df2ff8f0cef24 100644 --- a/src/common/slurm_accounting_storage.h +++ b/src/common/slurm_accounting_storage.h @@ -293,6 +293,7 @@ typedef struct { time_t period_end; /* period end of events */ time_t period_start; /* period start of events */ List reason_list; /* list of char * */ + List reason_uid_list; /* list of char * */ List state_list; /* list of char * */ } acct_event_cond_t; diff --git a/src/plugins/accounting_storage/mysql/as_mysql_cluster.c b/src/plugins/accounting_storage/mysql/as_mysql_cluster.c index 566653e5be86f6d5601b9d0168eca1da84f97eb7..c3cdd8e89470803bfa12665ab5b98a01851df5dd 100644 --- a/src/plugins/accounting_storage/mysql/as_mysql_cluster.c +++ b/src/plugins/accounting_storage/mysql/as_mysql_cluster.c @@ -840,6 +840,24 @@ extern List as_mysql_get_cluster_events(mysql_conn_t *mysql_conn, uint32_t uid, xstrcat(extra, ")"); } + if(event_cond->reason_uid_list + && list_count(event_cond->reason_uid_list)) { + set = 0; + if(extra) + xstrcat(extra, " && ("); + else + xstrcat(extra, " where ("); + itr = list_iterator_create(event_cond->reason_uid_list); + while((object = list_next(itr))) { + if(set) + xstrcat(extra, " || "); + xstrfmtcat(extra, "reason_uid='%s'", object); + set = 1; + } + list_iterator_destroy(itr); + xstrcat(extra, ")"); + } + if(event_cond->state_list && list_count(event_cond->state_list)) { set = 0; diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c index 330955c50ddf8194316e70f1be28596b12b5df6b..0576aeb171e10757f83df9bbc2cea7b8da2f69ae 100644 --- a/src/slurmctld/proc_req.c +++ b/src/slurmctld/proc_req.c @@ -729,7 +729,8 @@ static void _slurm_rpc_allocate_resources(slurm_msg_t * msg) ((immediate == 0) && job_waiting)) { xassert(job_ptr); info("sched: _slurm_rpc_allocate_resources JobId=%u " - "NodeList=%s %s",job_ptr->job_id, job_ptr->nodes, TIME_STR); + "NodeList=%s %s",job_ptr->job_id, + job_ptr->nodes, TIME_STR); /* send job_ID and node_name_ptr */ if (job_ptr->job_resrcs && job_ptr->job_resrcs->cpu_array_cnt) {