Esempio n. 1
0
static void _state_write_buf(Buf buffer)
{
	pack16(SLURM_PROTOCOL_VERSION, buffer);
	pack32(MIN_PORT, buffer);
	pack32(MAX_PORT, buffer);

	pthread_mutex_lock(&port_mutex);

	pack32(last_alloc_port, buffer);
	pack_bit_str_hex(port_resv, buffer);

	pthread_mutex_unlock(&port_mutex);
}
extern void pack_job_resources(job_resources_t *job_resrcs_ptr, Buf buffer,
			       uint16_t protocol_version)
{
	uint32_t cluster_flags = slurmdb_setup_cluster_flags();

	if (protocol_version >= SLURM_14_11_PROTOCOL_VERSION) {
		if (job_resrcs_ptr == NULL) {
			uint32_t empty = NO_VAL;
			pack32(empty, buffer);
			return;
		}

		pack32(job_resrcs_ptr->nhosts, buffer);
		pack32(job_resrcs_ptr->ncpus, buffer);
		pack32(job_resrcs_ptr->node_req, buffer);
		packstr(job_resrcs_ptr->nodes, buffer);
		pack8(job_resrcs_ptr->whole_node, buffer);

		if (job_resrcs_ptr->cpu_array_reps)
			pack32_array(job_resrcs_ptr->cpu_array_reps,
				     job_resrcs_ptr->cpu_array_cnt, buffer);
		else
			pack32_array(job_resrcs_ptr->cpu_array_reps, 0, buffer);

		if (job_resrcs_ptr->cpu_array_value)
			pack16_array(job_resrcs_ptr->cpu_array_value,
				     job_resrcs_ptr->cpu_array_cnt, buffer);
		else
			pack16_array(job_resrcs_ptr->cpu_array_value,
				     0, buffer);

		if (job_resrcs_ptr->cpus)
			pack16_array(job_resrcs_ptr->cpus,
				     job_resrcs_ptr->nhosts, buffer);
		else
			pack16_array(job_resrcs_ptr->cpus, 0, buffer);

		if (job_resrcs_ptr->cpus_used)
			pack16_array(job_resrcs_ptr->cpus_used,
				     job_resrcs_ptr->nhosts, buffer);
		else
			pack16_array(job_resrcs_ptr->cpus_used, 0, buffer);

		if (job_resrcs_ptr->memory_allocated)
			pack32_array(job_resrcs_ptr->memory_allocated,
				     job_resrcs_ptr->nhosts, buffer);
		else
			pack32_array(job_resrcs_ptr->memory_allocated,
				     0, buffer);

		if (job_resrcs_ptr->memory_used)
			pack32_array(job_resrcs_ptr->memory_used,
				     job_resrcs_ptr->nhosts, buffer);
		else
			pack32_array(job_resrcs_ptr->memory_used, 0, buffer);
		if (!(cluster_flags & CLUSTER_FLAG_BG)) {
			int i;
			uint32_t core_cnt = 0, sock_recs = 0;
			xassert(job_resrcs_ptr->cores_per_socket);
			xassert(job_resrcs_ptr->sock_core_rep_count);
			xassert(job_resrcs_ptr->sockets_per_node);

			for (i=0; i<job_resrcs_ptr->nhosts; i++) {
				core_cnt += job_resrcs_ptr->sockets_per_node[i]
					* job_resrcs_ptr->cores_per_socket[i] *
					job_resrcs_ptr->sock_core_rep_count[i];
				sock_recs += job_resrcs_ptr->
					     sock_core_rep_count[i];
				if (sock_recs >= job_resrcs_ptr->nhosts)
					break;
			}
			i++;
			pack16_array(job_resrcs_ptr->sockets_per_node,
				     (uint32_t) i, buffer);
			pack16_array(job_resrcs_ptr->cores_per_socket,
				     (uint32_t) i, buffer);
			pack32_array(job_resrcs_ptr->sock_core_rep_count,
				     (uint32_t) i, buffer);

			xassert(job_resrcs_ptr->core_bitmap);
			xassert(job_resrcs_ptr->core_bitmap_used);
			pack_bit_str_hex(job_resrcs_ptr->core_bitmap, buffer);
			pack_bit_str_hex(job_resrcs_ptr->core_bitmap_used,
					 buffer);
		}
	} else if (protocol_version >= SLURM_14_03_PROTOCOL_VERSION) {
		if (job_resrcs_ptr == NULL) {
			uint32_t empty = NO_VAL;
			pack32(empty, buffer);
			return;
		}

		pack32(job_resrcs_ptr->nhosts, buffer);
		pack32(job_resrcs_ptr->ncpus, buffer);
		pack32(job_resrcs_ptr->node_req, buffer);
		packstr(job_resrcs_ptr->nodes, buffer);
		pack8(job_resrcs_ptr->whole_node, buffer);

		if (job_resrcs_ptr->cpu_array_reps)
			pack32_array(job_resrcs_ptr->cpu_array_reps,
				     job_resrcs_ptr->cpu_array_cnt, buffer);
		else
			pack32_array(job_resrcs_ptr->cpu_array_reps, 0, buffer);

		if (job_resrcs_ptr->cpu_array_value)
			pack16_array(job_resrcs_ptr->cpu_array_value,
				     job_resrcs_ptr->cpu_array_cnt, buffer);
		else
			pack16_array(job_resrcs_ptr->cpu_array_value,
				     0, buffer);

		if (job_resrcs_ptr->cpus)
			pack16_array(job_resrcs_ptr->cpus,
				     job_resrcs_ptr->nhosts, buffer);
		else
			pack16_array(job_resrcs_ptr->cpus, 0, buffer);

		if (job_resrcs_ptr->cpus_used)
			pack16_array(job_resrcs_ptr->cpus_used,
				     job_resrcs_ptr->nhosts, buffer);
		else
			pack16_array(job_resrcs_ptr->cpus_used, 0, buffer);

		if (job_resrcs_ptr->memory_allocated)
			pack32_array(job_resrcs_ptr->memory_allocated,
				     job_resrcs_ptr->nhosts, buffer);
		else
			pack32_array(job_resrcs_ptr->memory_allocated,
				     0, buffer);

		if (job_resrcs_ptr->memory_used)
			pack32_array(job_resrcs_ptr->memory_used,
				     job_resrcs_ptr->nhosts, buffer);
		else
			pack32_array(job_resrcs_ptr->memory_used, 0, buffer);
		if (!(cluster_flags & CLUSTER_FLAG_BG)) {
			int i;
			uint32_t core_cnt = 0, sock_recs = 0;
			xassert(job_resrcs_ptr->cores_per_socket);
			xassert(job_resrcs_ptr->sock_core_rep_count);
			xassert(job_resrcs_ptr->sockets_per_node);

			for (i=0; i<job_resrcs_ptr->nhosts; i++) {
				core_cnt += job_resrcs_ptr->sockets_per_node[i]
					* job_resrcs_ptr->cores_per_socket[i] *
					job_resrcs_ptr->sock_core_rep_count[i];
				sock_recs += job_resrcs_ptr->
					     sock_core_rep_count[i];
				if (sock_recs >= job_resrcs_ptr->nhosts)
					break;
			}
			i++;
			pack16_array(job_resrcs_ptr->sockets_per_node,
				     (uint32_t) i, buffer);
			pack16_array(job_resrcs_ptr->cores_per_socket,
				     (uint32_t) i, buffer);
			pack32_array(job_resrcs_ptr->sock_core_rep_count,
				     (uint32_t) i, buffer);

			xassert(job_resrcs_ptr->core_bitmap);
			xassert(job_resrcs_ptr->core_bitmap_used);
			pack_bit_str(job_resrcs_ptr->core_bitmap, buffer);
			pack_bit_str(job_resrcs_ptr->core_bitmap_used, buffer);
		}
	} else {
		error("pack_job_resources: protocol_version %hu not supported",
		      protocol_version);
	}
}