From 07e29febedfccf040438311d87cf3ef6df7bf7c1 Mon Sep 17 00:00:00 2001
From: jce <jce@unknown>
Date: Tue, 30 Jul 2002 23:14:10 +0000
Subject: [PATCH] Added a new slurm api function to get a job_step_info

---
 src/api/Makefile.am     |   1 +
 src/api/job_info.c      |  34 ++++++-------
 src/api/job_step_info.c | 104 ++++++++++++++++++++++++++++++++++++++++
 src/api/slurm.h         |   3 +-
 4 files changed, 124 insertions(+), 18 deletions(-)
 create mode 100644 src/api/job_step_info.c

diff --git a/src/api/Makefile.am b/src/api/Makefile.am
index 10211458668..739c16e52d1 100644
--- a/src/api/Makefile.am
+++ b/src/api/Makefile.am
@@ -28,6 +28,7 @@ libslurm_la_SOURCES =    \
 	complete.c       \
 	config_info.c    \
 	job_info.c       \
+	job_step_info.c       \
 	node_info.c      \
 	partition_info.c \
 	submit.c         \
diff --git a/src/api/job_info.c b/src/api/job_info.c
index 7c0a52d5749..985c4dfcf61 100644
--- a/src/api/job_info.c
+++ b/src/api/job_info.c
@@ -51,7 +51,7 @@ slurm_print_job_info_msg ( FILE* out, job_info_msg_t * job_info_msg_ptr )
 	}
 }
 
-/* slurm_print_job_table - output information about a specific Slurm job */
+/* slurm_print_job_info - output information about a specific Slurm job */
 void
 slurm_print_job_info ( FILE* out, job_info_t * job_ptr )
 {
@@ -96,36 +96,36 @@ slurm_print_job_info ( FILE* out, job_info_t * job_ptr )
 int
 slurm_load_jobs (time_t update_time, job_info_msg_t **job_info_msg_pptr)
 {
-        int msg_size ;
-        int rc ;
-        slurm_fd sockfd ;
-        slurm_msg_t request_msg ;
-        slurm_msg_t response_msg ;
-        last_update_msg_t last_time_msg ;
+	int msg_size ;
+	int rc ;
+	slurm_fd sockfd ;
+	slurm_msg_t request_msg ;
+	slurm_msg_t response_msg ;
+	job_info_request_msg_t last_time_msg ;
 	return_code_msg_t * slurm_rc_msg ;
 
-        /* init message connection for message communication with controller */
+	/* init message connection for message communication with controller */
 	if ( ( sockfd = slurm_open_controller_conn ( ) ) == SLURM_SOCKET_ERROR ) {
 		slurm_seterrno ( SLURM_COMMUNICATIONS_CONNECTION_ERROR );
 		return SLURM_SOCKET_ERROR ;
 	}
 
-        /* send request message */
-        last_time_msg . last_update = update_time ;
-        request_msg . msg_type = REQUEST_JOB_INFO ;
-        request_msg . data = &last_time_msg ;
+	/* send request message */
+	last_time_msg . last_update = update_time ;
+	request_msg . msg_type = REQUEST_JOB_INFO ;
+	request_msg . data = &last_time_msg ;
 	if ( ( rc = slurm_send_controller_msg ( sockfd , & request_msg ) ) == SLURM_SOCKET_ERROR ) {
 		slurm_seterrno ( SLURM_COMMUNICATIONS_SEND_ERROR );
 		return SLURM_SOCKET_ERROR ;
 	}
 
-        /* receive message */
+	/* receive message */
 	if ( ( msg_size = slurm_receive_msg ( sockfd , & response_msg ) ) == SLURM_SOCKET_ERROR ) {
 		slurm_seterrno ( SLURM_COMMUNICATIONS_RECEIVE_ERROR );
 		return SLURM_SOCKET_ERROR ;
 	}
 
-        /* shutdown message connection */
+	/* shutdown message connection */
 	if ( ( rc = slurm_shutdown_msg_conn ( sockfd ) ) == SLURM_SOCKET_ERROR ) {
 		slurm_seterrno ( SLURM_COMMUNICATIONS_SHUTDOWN_ERROR );
 		return SLURM_SOCKET_ERROR ;
@@ -136,8 +136,8 @@ slurm_load_jobs (time_t update_time, job_info_msg_t **job_info_msg_pptr)
 	switch ( response_msg . msg_type )
 	{
 		case RESPONSE_JOB_INFO:
-        		 *job_info_msg_pptr = ( job_info_msg_t * ) response_msg . data ;
-		        return SLURM_PROTOCOL_SUCCESS ;
+			*job_info_msg_pptr = ( job_info_msg_t * ) response_msg . data ;
+			return SLURM_PROTOCOL_SUCCESS ;
 			break ;
 		case RESPONSE_SLURM_RC:
 			slurm_rc_msg = ( return_code_msg_t * ) response_msg . data ;
@@ -154,6 +154,6 @@ slurm_load_jobs (time_t update_time, job_info_msg_t **job_info_msg_pptr)
 			break ;
 	}
 
-        return SLURM_PROTOCOL_SUCCESS ;
+	return SLURM_PROTOCOL_SUCCESS ;
 }
 
diff --git a/src/api/job_step_info.c b/src/api/job_step_info.c
new file mode 100644
index 00000000000..b52f7942b52
--- /dev/null
+++ b/src/api/job_step_info.c
@@ -0,0 +1,104 @@
+/*****************************************************************************\
+ *  job_info.c - get/print the job state information of slurm
+ *****************************************************************************
+ *  Copyright (C) 2002 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Moe Jette <jette1@llnl.gov> et. al.
+ *  UCRL-CODE-2002-040.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  
+ *  SLURM is free software; you can redistribute it and/or modify it under
+ *  the terms of the GNU General Public License as published by the Free
+ *  Software Foundation; either version 2 of the License, or (at your option)
+ *  any later version.
+ *  
+ *  SLURM is distributed in the hope that it will be useful, but WITHOUT ANY
+ *  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ *  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ *  details.
+ *  
+ *  You should have received a copy of the GNU General Public License along
+ *  with ConMan; if not, write to the Free Software Foundation, Inc.,
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <src/api/slurm.h>
+#include <src/common/slurm_protocol_api.h>
+
+/* slurm_load_job_steps - issue RPC to get Slurm job_step state information */
+int
+slurm_get_job_steps ( uint32_t job_id, int16_t step_id, job_step_info_response_msg_t **step_response_pptr)
+{
+	int msg_size ;
+	int rc ;
+	slurm_fd sockfd ;
+	slurm_msg_t request_msg ;
+	slurm_msg_t response_msg ;
+
+	job_step_info_request_msg_t step_request;
+	return_code_msg_t * slurm_rc_msg ;
+
+	/* init message connection for message communication with controller */
+	if ( ( sockfd = slurm_open_controller_conn ( ) ) == SLURM_SOCKET_ERROR ) {
+		slurm_seterrno ( SLURM_COMMUNICATIONS_CONNECTION_ERROR );
+		return SLURM_SOCKET_ERROR ;
+	}
+
+	/* send request message */
+	step_request . job_id = job_id ;
+	step_request . job_step_id = step_id ;
+	request_msg . msg_type = REQUEST_JOB_STEP_INFO ;
+	request_msg . data = &step_request;
+	if ( ( rc = slurm_send_controller_msg ( sockfd , & request_msg ) ) == SLURM_SOCKET_ERROR ) {
+		slurm_seterrno ( SLURM_COMMUNICATIONS_SEND_ERROR );
+		return SLURM_SOCKET_ERROR ;
+	}
+
+	/* receive message */
+	if ( ( msg_size = slurm_receive_msg ( sockfd , & response_msg ) ) == SLURM_SOCKET_ERROR ) {
+		slurm_seterrno ( SLURM_COMMUNICATIONS_RECEIVE_ERROR );
+		return SLURM_SOCKET_ERROR ;
+	}
+
+	/* shutdown message connection */
+	if ( ( rc = slurm_shutdown_msg_conn ( sockfd ) ) == SLURM_SOCKET_ERROR ) {
+		slurm_seterrno ( SLURM_COMMUNICATIONS_SHUTDOWN_ERROR );
+		return SLURM_SOCKET_ERROR ;
+	}
+	if ( msg_size )
+		return msg_size;
+
+	switch ( response_msg . msg_type )
+	{
+		case RESPONSE_JOB_STEP_INFO:
+			*step_response_pptr = ( job_step_info_response_msg_t * ) response_msg . data ;
+			return SLURM_PROTOCOL_SUCCESS ;
+			break ;
+		case RESPONSE_SLURM_RC:
+			slurm_rc_msg = ( return_code_msg_t * ) response_msg . data ;
+			rc = slurm_rc_msg->return_code;
+			slurm_free_return_code_msg ( slurm_rc_msg );	
+			if (rc) {
+				slurm_seterrno ( rc );
+				return SLURM_PROTOCOL_ERROR;
+			}
+			break ;
+		default:
+			slurm_seterrno ( SLURM_UNEXPECTED_MSG_ERROR );
+			return SLURM_PROTOCOL_ERROR;
+			break ;
+	}
+
+	return SLURM_PROTOCOL_SUCCESS ;
+}
+
diff --git a/src/api/slurm.h b/src/api/slurm.h
index 2e4b47bbeeb..77d97115d7b 100644
--- a/src/api/slurm.h
+++ b/src/api/slurm.h
@@ -57,7 +57,7 @@ extern void slurm_free_node_info_msg (node_info_msg_t * node_buffer_ptr);
  */
 extern void slurm_print_job_info_msg ( FILE* , job_info_msg_t * job_info_msg_ptr ) ;
 
-/* slurm_print_job_table - prints the job table object (if allocated) */
+/* slurm_print_job_info - prints the job table object (if allocated) */
 extern void slurm_print_job_info ( FILE*, job_info_t * job_ptr );
 
 /* 
@@ -117,6 +117,7 @@ extern int slurm_load_partitions (time_t update_time, partition_info_msg_t **par
 extern int slurm_submit_batch_job (job_desc_msg_t * job_desc_msg, 
 		submit_response_msg_t ** slurm_alloc_msg );
 
+extern int slurm_get_job_steps ( uint32_t job_id, int16_t step_id, job_step_info_response_msg_t **step_response_pptr);
 /*
  * slurm_will_run - determine if a job would execute immediately 
  *	if submitted. 
-- 
GitLab