From a8227df9921651b5ea4bae34a9421024e42892bd Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Tue, 14 Jan 2003 22:23:06 +0000
Subject: [PATCH] New API added to map local pid into slurm job id. New RPC
 defined to map local pid into slurm job id.

---
 src/common/slurm_protocol_api.h  |  8 ---
 src/common/slurm_protocol_defs.c | 10 ++++
 src/common/slurm_protocol_defs.h | 13 +++++
 src/common/slurm_protocol_pack.c | 83 ++++++++++++++++++++++++++++++++
 4 files changed, 106 insertions(+), 8 deletions(-)

diff --git a/src/common/slurm_protocol_api.h b/src/common/slurm_protocol_api.h
index 879a76b8364..056ecee703e 100644
--- a/src/common/slurm_protocol_api.h
+++ b/src/common/slurm_protocol_api.h
@@ -404,14 +404,6 @@ int slurm_send_recv_controller_msg(slurm_msg_t * request_msg,
 int slurm_send_recv_node_msg(slurm_msg_t * request_msg,
 			     slurm_msg_t * response_msg);
 
-/* slurm_send_only_controller_msg
- * opens a connection to the controller, sends the controller a 
- * message then, closes the connection
- * IN request_msg	- slurm_msg request
- * RET int 		- return code
- */
-int slurm_send_only_node_msg(slurm_msg_t * request_msg);
-
 /* slurm_send_only_controller_msg
  * opens a connection to node, sends the node a message then, 
  * closes the connection
diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c
index a8e6e05526f..e56550b3f57 100644
--- a/src/common/slurm_protocol_defs.c
+++ b/src/common/slurm_protocol_defs.c
@@ -66,6 +66,16 @@ void slurm_free_return_code_msg(return_code_msg_t * msg)
 	xfree(msg);
 }
 
+void slurm_free_job_id_request_msg(job_id_request_msg_t * msg)
+{
+	xfree(msg);
+}
+
+void slurm_free_job_id_response_msg(job_id_response_msg_t * msg)
+{
+	xfree(msg);
+}
+
 void slurm_free_job_desc_msg(job_desc_msg_t * msg)
 {
 	int i;
diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h
index 9399356ee2f..286c0012c1b 100644
--- a/src/common/slurm_protocol_defs.h
+++ b/src/common/slurm_protocol_defs.h
@@ -93,6 +93,8 @@ typedef enum {
 	RESPONSE_PARTITION_INFO,
 	REQUEST_ACCTING_INFO,
 	RESPONSE_ACCOUNTING_INFO,
+	REQUEST_JOB_ID,
+	RESPONSE_JOB_ID,
 
 	REQUEST_UPDATE_JOB = 3001,
 	REQUEST_UPDATE_NODE,
@@ -329,6 +331,14 @@ typedef struct batch_job_launch_msg {
 				 *   name=value pairs, one per line */
 } batch_job_launch_msg_t;
 
+typedef struct job_id_request_msg {
+	uint32_t job_pid;	/* local process_id of a job */
+} job_id_request_msg_t;
+
+typedef struct job_id_response_msg {
+	uint32_t job_id;	/* slurm job_id */
+} job_id_response_msg_t;
+
 /*****************************************************************************\
  * Slurm API Message Types
 \*****************************************************************************/
@@ -370,6 +380,9 @@ slurm_free_node_registration_status_msg(slurm_node_registration_status_msg_t *
 void inline slurm_free_job_info(job_info_t * job);
 void inline slurm_free_job_info_members(job_info_t * job);
 
+void inline slurm_free_job_id_request_msg(job_id_request_msg_t * msg);
+void inline slurm_free_job_id_response_msg(job_id_response_msg_t * msg);
+
 void inline slurm_free_job_launch_msg(batch_job_launch_msg_t * msg);
 
 void inline slurm_free_update_node_msg(update_node_msg_t * msg);
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index ba9f18a8609..9a7453ee546 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -191,6 +191,13 @@ static void _pack_slurm_addr_array(slurm_addr * slurm_address,
 static int _unpack_slurm_addr_array(slurm_addr ** slurm_address,
 				    uint16_t * size_val, Buf buffer);
 
+static void _pack_job_id_request_msg(job_id_request_msg_t * msg, Buf buffer);
+static int  _unpack_job_id_request_msg(job_id_request_msg_t ** msg, Buf buffer);
+
+static void _pack_job_id_response_msg(job_id_response_msg_t * msg, Buf buffer);
+static int  _unpack_job_id_response_msg(job_id_response_msg_t ** msg, 
+					Buf buffer);
+
 static void _pack_buffer_msg(slurm_msg_t * msg, Buf buffer);
 
 /* pack_header
@@ -464,6 +471,16 @@ pack_msg(slurm_msg_t const *msg, Buf buffer)
 				(job_step_create_request_msg_t *)
 				msg->data, buffer);
 		 break;
+	 case REQUEST_JOB_ID:
+		 _pack_job_id_request_msg(
+				(job_id_request_msg_t *)msg->data,
+				buffer);
+		 break;
+	 case RESPONSE_JOB_ID:
+		 _pack_job_id_response_msg(
+				(job_id_response_msg_t *)msg->data,
+				buffer);
+		 break;
 	 default:
 		 debug("No pack method for msg type %i", msg->msg_type);
 		 return EINVAL;
@@ -664,6 +681,16 @@ unpack_msg(slurm_msg_t * msg, Buf buffer)
 					(job_step_create_request_msg_t **)
 					& msg->data, buffer);
 		 break;
+	 case REQUEST_JOB_ID:
+		 rc = _unpack_job_id_request_msg(
+				(job_id_request_msg_t **) & msg->data,
+				buffer);
+		 break;
+	 case RESPONSE_JOB_ID:
+		 rc = _unpack_job_id_response_msg(
+				(job_id_response_msg_t **) & msg->data,
+				buffer);
+		 break;
 	 default:
 		 debug("No unpack method for msg type %i", msg->msg_type);
 		 return EINVAL;
@@ -2337,6 +2364,62 @@ _unpack_batch_job_launch_msg(batch_job_launch_msg_t ** msg, Buf buffer)
 	return SLURM_ERROR;
 }
 
+static void
+_pack_job_id_request_msg(job_id_request_msg_t * msg, Buf buffer)
+{
+	assert(msg != NULL);
+
+	pack32(msg->job_pid, buffer);
+}
+
+static int
+_unpack_job_id_request_msg(job_id_request_msg_t ** msg, Buf buffer)
+{
+	job_id_request_msg_t *tmp_ptr;
+
+	/* alloc memory for structure */
+	assert(msg != NULL);
+	tmp_ptr = xmalloc(sizeof(job_id_request_msg_t));
+	*msg = tmp_ptr;
+
+	/* load the data values */
+	safe_unpack32(&tmp_ptr->job_pid, buffer);
+	return SLURM_SUCCESS;
+
+      unpack_error:
+	FREE_NULL(tmp_ptr);
+	*msg = NULL;
+	return SLURM_ERROR;
+}
+
+static void
+_pack_job_id_response_msg(job_id_response_msg_t * msg, Buf buffer)
+{
+	assert(msg != NULL);
+
+	pack32(msg->job_id, buffer);
+}
+
+static int
+_unpack_job_id_response_msg(job_id_response_msg_t ** msg, Buf buffer)
+{
+	job_id_response_msg_t *tmp_ptr;
+
+	/* alloc memory for structure */
+	assert(msg != NULL);
+	tmp_ptr = xmalloc(sizeof(job_id_response_msg_t));
+	*msg = tmp_ptr;
+
+	/* load the data values */
+	safe_unpack32(&tmp_ptr->job_id, buffer);
+	return SLURM_SUCCESS;
+
+      unpack_error:
+	FREE_NULL(tmp_ptr);
+	*msg = NULL;
+	return SLURM_ERROR;
+}
+
 /* template 
 void pack_ ( * msg , Buf buffer )
 {
-- 
GitLab