From a1cb28434088d7931ffcf7da4159b70a38d689db Mon Sep 17 00:00:00 2001 From: Morris Jette <jette@schedmd.com> Date: Wed, 10 Sep 2014 15:51:40 -0700 Subject: [PATCH] Add read locks around job_submit plugin calls --- src/slurmctld/proc_req.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c index cf7c6d5661c..4229b287436 100644 --- a/src/slurmctld/proc_req.c +++ b/src/slurmctld/proc_req.c @@ -953,6 +953,9 @@ static void _slurm_rpc_allocate_resources(slurm_msg_t * msg) DEF_TIMERS; job_desc_msg_t *job_desc_msg = (job_desc_msg_t *) msg->data; resource_allocation_response_msg_t alloc_msg; + /* Locks: Read config, read job, read node, read partition */ + slurmctld_lock_t job_read_lock = { + READ_LOCK, READ_LOCK, READ_LOCK, READ_LOCK }; /* Locks: Read config, write job, write node, read partition */ slurmctld_lock_t job_write_lock = { READ_LOCK, WRITE_LOCK, WRITE_LOCK, READ_LOCK }; @@ -981,8 +984,14 @@ static void _slurm_rpc_allocate_resources(slurm_msg_t * msg) error("REQUEST_RESOURCE_ALLOCATE lacks alloc_node from uid=%d", uid); } - if (error_code == SLURM_SUCCESS) + + if (error_code == SLURM_SUCCESS) { + /* Locks are for job_submit plugin use */ + lock_slurmctld(job_read_lock); error_code = validate_job_create_req(job_desc_msg,uid,&err_msg); + unlock_slurmctld(job_read_lock); + } + #if HAVE_ALPS_CRAY /* * Catch attempts to nest salloc sessions. It is not possible to use an @@ -2237,6 +2246,9 @@ static void _slurm_rpc_job_will_run(slurm_msg_t * msg) int error_code = SLURM_SUCCESS; struct job_record *job_ptr = NULL; job_desc_msg_t *job_desc_msg = (job_desc_msg_t *) msg->data; + /* Locks: Read config, read job, read node, read partition */ + slurmctld_lock_t job_read_lock = { + READ_LOCK, READ_LOCK, READ_LOCK, READ_LOCK }; /* Locks: Write job, read node, read partition */ slurmctld_lock_t job_write_lock = { NO_LOCK, WRITE_LOCK, READ_LOCK, READ_LOCK }; @@ -2259,8 +2271,13 @@ static void _slurm_rpc_job_will_run(slurm_msg_t * msg) error_code = ESLURM_INVALID_NODE_NAME; error("REQUEST_JOB_WILL_RUN lacks alloc_node from uid=%d", uid); } - if (error_code == SLURM_SUCCESS) + + if (error_code == SLURM_SUCCESS) { + /* Locks are for job_submit plugin use */ + lock_slurmctld(job_read_lock); error_code = validate_job_create_req(job_desc_msg,uid,&err_msg); + unlock_slurmctld(job_read_lock); + } if (!slurm_get_peer_addr(msg->conn_fd, &resp_addr)) { job_desc_msg->resp_host = xmalloc(16); @@ -3009,6 +3026,9 @@ static void _slurm_rpc_submit_batch_job(slurm_msg_t * msg) slurm_msg_t response_msg; submit_response_msg_t submit_msg; job_desc_msg_t *job_desc_msg = (job_desc_msg_t *) msg->data; + /* Locks: Read config, read job, read node, read partition */ + slurmctld_lock_t job_read_lock = { + READ_LOCK, READ_LOCK, READ_LOCK, READ_LOCK }; /* Locks: Write job, read node, read partition */ slurmctld_lock_t job_write_lock = { NO_LOCK, WRITE_LOCK, READ_LOCK, READ_LOCK }; @@ -3033,8 +3053,14 @@ static void _slurm_rpc_submit_batch_job(slurm_msg_t * msg) error_code = ESLURM_INVALID_NODE_NAME; error("REQUEST_SUBMIT_BATCH_JOB lacks alloc_node from uid=%d", uid); } - if (error_code == SLURM_SUCCESS) + + if (error_code == SLURM_SUCCESS) { + /* Locks are for job_submit plugin use */ + lock_slurmctld(job_read_lock); error_code = validate_job_create_req(job_desc_msg,uid,&err_msg); + unlock_slurmctld(job_read_lock); + } + dump_job_desc(job_desc_msg); if (error_code == SLURM_SUCCESS) { _throttle_start(&active_rpc_cnt); -- GitLab