diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index 94f2829605968f6eb73ab439688f8722a5685982..2ee574f1a8891233150f44e7c07b46277fc6a967 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -8654,7 +8654,6 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer, packnull(buffer); packnull(buffer); - pack32(NO_VAL, buffer); pack32(NO_VAL, buffer); packnull(buffer); @@ -8708,8 +8707,6 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer, } count = NO_VAL; - pack32(block_info->job_running, buffer); - packstr(block_info->linuximage, buffer); packstr(block_info->mloaderimage, buffer); packstr(block_info->mp_str, buffer); @@ -8792,7 +8789,7 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer, } count = NO_VAL; - pack32(block_info->job_running, buffer); + pack32(NO_VAL, buffer); /* for job_running */ packstr(block_info->linuximage, buffer); packstr(block_info->mloaderimage, buffer); @@ -8800,7 +8797,7 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer, packstr(block_info->mp_used_str, buffer); pack32(block_info->cnode_cnt, buffer); pack16(block_info->node_use, buffer); - packnull(buffer); + packnull(buffer); /* for user name */ packstr(block_info->ramdiskimage, buffer); packstr(block_info->reason, buffer); pack16(block_info->state, buffer); @@ -8860,7 +8857,7 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer, } else packnull(buffer); - pack32(block_info->job_running, buffer); + pack32(NO_VAL, buffer); /* for job_running */ packstr(block_info->linuximage, buffer); packstr(block_info->mloaderimage, buffer); @@ -8868,7 +8865,7 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer, pack32(block_info->cnode_cnt, buffer); if(cluster_flags & CLUSTER_FLAG_BGL) pack16(block_info->node_use, buffer); - packnull(buffer); + packnull(buffer); /* for user_name */ packstr(block_info->ramdiskimage, buffer); packstr(block_info->reason, buffer); pack16(block_info->state, buffer); @@ -8920,7 +8917,7 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer, } else packnull(buffer); - pack32(block_info->job_running, buffer); + pack32(NO_VAL, buffer); /* for job_running */ packstr(block_info->linuximage, buffer); packstr(block_info->mloaderimage, buffer); @@ -8928,7 +8925,7 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer, pack32(block_info->cnode_cnt, buffer); if(cluster_flags & CLUSTER_FLAG_BGL) pack16(block_info->node_use, buffer); - packnull(buffer); + packnull(buffer); /* for user_name */ packstr(block_info->ramdiskimage, buffer); pack16(block_info->state, buffer); } @@ -9014,7 +9011,6 @@ extern int slurm_unpack_block_info_members(block_info_t *block_info, Buf buffer, } } - safe_unpack32(&block_info->job_running, buffer); safe_unpackstr_xmalloc(&block_info->linuximage, &uint32_tmp, buffer); safe_unpackstr_xmalloc(&block_info->mloaderimage, @@ -9081,7 +9077,16 @@ extern int slurm_unpack_block_info_members(block_info_t *block_info, Buf buffer, } } - safe_unpack32(&block_info->job_running, buffer); + safe_unpack32(&uint32_tmp, buffer); + if (uint32_tmp != (uint32_t)NO_JOB_RUNNING) { + block_job_info_t *job = + xmalloc(sizeof(block_job_info_t));; + if (!block_info->job_list) + block_info->job_list = + list_create(slurm_free_block_job_info); + job->job_id = uint32_tmp; + list_append(block_info->job_list, job); + } safe_unpackstr_xmalloc(&block_info->linuximage, &uint32_tmp, buffer); safe_unpackstr_xmalloc(&block_info->mloaderimage, @@ -9129,7 +9134,16 @@ extern int slurm_unpack_block_info_members(block_info_t *block_info, Buf buffer, block_info->ionode_inx = bitfmt2int(mp_inx_str); xfree(mp_inx_str); } - safe_unpack32(&block_info->job_running, buffer); + safe_unpack32(&uint32_tmp, buffer); + if (uint32_tmp != (uint32_t)NO_JOB_RUNNING) { + block_job_info_t *job = + xmalloc(sizeof(block_job_info_t));; + if (!block_info->job_list) + block_info->job_list = + list_create(slurm_free_block_job_info); + job->job_id = uint32_tmp; + list_append(block_info->job_list, job); + } safe_unpackstr_xmalloc(&block_info->linuximage, &uint32_tmp, buffer); safe_unpackstr_xmalloc(&block_info->mloaderimage, @@ -9169,7 +9183,16 @@ extern int slurm_unpack_block_info_members(block_info_t *block_info, Buf buffer, block_info->ionode_inx = bitfmt2int(mp_inx_str); xfree(mp_inx_str); } - safe_unpack32(&block_info->job_running, buffer); + safe_unpack32(&uint32_tmp, buffer); + if (uint32_tmp != (uint32_t)NO_JOB_RUNNING) { + block_job_info_t *job = + xmalloc(sizeof(block_job_info_t));; + if (!block_info->job_list) + block_info->job_list = + list_create(slurm_free_block_job_info); + job->job_id = uint32_tmp; + list_append(block_info->job_list, job); + } safe_unpackstr_xmalloc(&block_info->linuximage, &uint32_tmp, buffer); safe_unpackstr_xmalloc(&block_info->mloaderimage, diff --git a/src/plugins/select/bluegene/select_bluegene.c b/src/plugins/select/bluegene/select_bluegene.c index 32107ecc59b25408de29765262ab752e26e3c71a..4e6044d5237785a995bd264606bb9a2afa7c8247 100644 --- a/src/plugins/select/bluegene/select_bluegene.c +++ b/src/plugins/select/bluegene/select_bluegene.c @@ -426,6 +426,21 @@ static bg_record_t *_translate_info_2_record(block_info_t *block_info) return bg_record; } +static void _local_pack_block_job_info(struct job_record *job_ptr, Buf buffer, + uint16_t protocol_version) +{ + block_job_info_t block_job; + select_jobinfo_t *jobinfo = job_ptr->select_jobinfo->data; + + memset(&block_job, 0, sizeof(block_job_info_t)); + block_job.job_id = job_ptr->job_id; + block_job.user_id = job_ptr->user_id; + block_job.user_name = jobinfo->user_name; + block_job.cnodes = jobinfo->ionode_str; + /* block_job.cnode_inx -- try not to set */ + slurm_pack_block_job_info(&block_job, buffer, protocol_version); +} + /* Pack all relevent information about a block */ /* NOTE: There is a matching pack function in * common/slurm_protocol_pack.c dealing with the block_info_t @@ -438,13 +453,10 @@ static void _pack_block(bg_record_t *bg_record, Buf buffer, #ifdef HAVE_BGQ int dim; #endif - uint32_t count = NO_VAL; - block_job_info_t block_job; + uint32_t count = NO_VAL, running_job = 0; struct job_record *job_ptr; ListIterator itr; - memset(&block_job, 0, sizeof(block_job_info_t)); - if (protocol_version >= SLURM_2_4_PROTOCOL_VERSION) { packstr(bg_record->bg_block_id, buffer); packstr(bg_record->blrtsimage, buffer); @@ -462,30 +474,28 @@ static void _pack_block(bg_record_t *bg_record, Buf buffer, if (bg_record->job_list) count = list_count(bg_record->job_list); - pack32(count, buffer); + if (count && count != NO_VAL) { + pack32(count, buffer); itr = list_iterator_create(bg_record->job_list); while ((job_ptr = list_next(itr))) { - select_jobinfo_t *jobinfo; if (job_ptr->magic != JOB_MAGIC) { list_delete_item(itr); continue; } - jobinfo = job_ptr->select_jobinfo->data; - - block_job.job_id = job_ptr->job_id; - block_job.user_id = job_ptr->user_id; - block_job.user_name = jobinfo->user_name; - block_job.cnodes = jobinfo->ionode_str; - /* block_job.cnode_inx -- try not to set */ - slurm_pack_block_job_info(&block_job, buffer, - protocol_version); + _local_pack_block_job_info( + job_ptr, buffer, protocol_version); } list_iterator_destroy(itr); - } + } else if (bg_record->job_ptr) { + pack32(1, buffer); + _local_pack_block_job_info( + bg_record->job_ptr, buffer, protocol_version); + } else + pack32(count, buffer); + count = NO_VAL; - pack32((uint32_t)bg_record->job_running, buffer); packstr(bg_record->linuximage, buffer); packstr(bg_record->mloaderimage, buffer); packstr(bg_record->mp_str, buffer); @@ -517,26 +527,21 @@ static void _pack_block(bg_record_t *bg_record, Buf buffer, if (count && count != NO_VAL) { itr = list_iterator_create(bg_record->job_list); while ((job_ptr = list_next(itr))) { - select_jobinfo_t *jobinfo; if (job_ptr->magic != JOB_MAGIC) { list_delete_item(itr); continue; } - jobinfo = job_ptr->select_jobinfo->data; - - block_job.job_id = job_ptr->job_id; - block_job.user_id = job_ptr->user_id; - block_job.user_name = jobinfo->user_name; - block_job.cnodes = jobinfo->ionode_str; - /* block_job.cnode_inx -- try not to set */ - slurm_pack_block_job_info(&block_job, buffer, - protocol_version); + _local_pack_block_job_info( + job_ptr, buffer, protocol_version); } list_iterator_destroy(itr); } + if ((count == 1) && running_job) + pack32((uint32_t)running_job, buffer); + else + pack32((uint32_t)bg_record->job_running, buffer); count = NO_VAL; - pack32((uint32_t)bg_record->job_running, buffer); packstr(bg_record->linuximage, buffer); packstr(bg_record->mloaderimage, buffer); packstr(bg_record->mp_str, buffer);