| /*****************************************************************************\ |
| * proc_msg.h - process incoming message functions |
| ***************************************************************************** |
| * Copyright (C) 2002 The Regents of the University of California. |
| * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). |
| * Written by Morris Jette <jette1@llnl.gov> and Kevin Tew <tew1@llnl.gov> |
| * CODE-OCEC-09-009. All rights reserved. |
| * |
| * This file is part of Slurm, a resource management program. |
| * For details, see <https://slurm.schedmd.com/>. |
| * Please also read the included file: DISCLAIMER. |
| * |
| * 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. |
| * |
| * In addition, as a special exception, the copyright holders give permission |
| * to link the code of portions of this program with the OpenSSL library under |
| * certain conditions as described in each individual source file, and |
| * distribute linked combinations including the two. You must obey the GNU |
| * General Public License in all respects for all of the code used other than |
| * OpenSSL. If you modify file(s) with this exception, you may extend this |
| * exception to your version of the file(s), but you are not obligated to do |
| * so. If you do not wish to do so, delete this exception statement from your |
| * version. If you delete this exception statement from all source files in |
| * the program, then also delete it here. |
| * |
| * 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 Slurm; if not, write to the Free Software Foundation, Inc., |
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| \*****************************************************************************/ |
| |
| #ifndef _HAVE_PROC_REQ_H |
| #define _HAVE_PROC_REQ_H |
| |
| #include <sys/time.h> |
| |
| #include "src/common/slurm_protocol_api.h" |
| |
| #include "src/slurmctld/locks.h" |
| |
| typedef struct { |
| uint16_t msg_type; |
| void (*func)(slurm_msg_t *msg); |
| void (*post_func)(); |
| slurmctld_lock_t locks; |
| |
| /* Queue structural elements */ |
| const char *msg_name; /* automatically derived from msg_type */ |
| |
| bool skip_stale; /* skip processing if connection is stale */ |
| bool queue_enabled; |
| bool hard_drop; /* discard traffic if max_queued exceeded */ |
| bool shutdown; |
| bool keep_msg; /* skip freeing msg and closing connection */ |
| bool rl_exempt; /* ignore this rpc for rate limiting */ |
| |
| int yield_sleep; /* usec sleep between cycles when busy */ |
| int interval; /* usec sleep after cycle if no longer busy */ |
| |
| uint16_t max_queued; |
| uint16_t max_per_cycle; |
| uint32_t max_usec_per_cycle; |
| |
| pthread_t thread; |
| pthread_cond_t cond; |
| pthread_mutex_t mutex; |
| |
| list_t *work; |
| |
| /* Queue processing statistics */ |
| uint16_t queued; |
| uint64_t dropped; |
| uint16_t cycle_last; |
| uint16_t cycle_max; |
| } slurmctld_rpc_t; |
| |
| extern slurmctld_rpc_t slurmctld_rpcs[]; |
| |
| /* |
| * Find RPC matching msg_type in slurmctld_rpcs[]. |
| * IN msg_type - RPC type - see slurm_msg_type_t |
| * RET ptr or NULL if not found |
| */ |
| extern slurmctld_rpc_t *find_rpc(uint16_t msg_type); |
| |
| /* |
| * slurmctld_req - Process an individual RPC request |
| * IN/OUT msg - the request message, data associated with the message is freed |
| * IN this_rpc - pointer to the rpc management structure |
| */ |
| extern void slurmctld_req(slurm_msg_t *msg, slurmctld_rpc_t *this_rpc); |
| |
| /* |
| * Update slurmctld stats structure with time spent processing an rpc. |
| */ |
| extern void record_rpc_stats(slurm_msg_t *msg, long delta); |
| |
| /* |
| * Update slurmctld stats structure related to a particular rpc_queue |
| */ |
| extern void record_rpc_queue_stats(slurmctld_rpc_t *q); |
| |
| /* Copy an array of type char **, xmalloc() the array and xstrdup() the |
| * strings in the array */ |
| extern char **xduparray(uint32_t size, char ** array); |
| |
| /* |
| * build_alloc_msg - Fill in resource_allocation_response_msg_t off job_record. |
| * job_ptr IN - job_record to copy members off. |
| * error_code IN - error code used for the response. |
| * job_submit_user_msg IN - user message from job submit plugin. |
| * RET resource_allocation_response_msg_t filled in. |
| */ |
| extern resource_allocation_response_msg_t *build_alloc_msg( |
| job_record_t *job_ptr, int error_code, char *job_submit_user_msg); |
| |
| /* |
| * srun_allocate - notify srun of a resource allocation |
| * IN job_ptr - job allocated resources |
| */ |
| extern void srun_allocate(job_record_t *job_ptr); |
| |
| #endif /* !_HAVE_PROC_REQ_H */ |