1 /*
2 * Copyright (c) 2011 Los Alamos National Security, LLC.
3 * All rights reserved.
4 * $COPYRIGHT$
5 *
6 * Additional copyrights may follow
7 *
8 * $HEADER$
9 */
10
11 /**** ORTE STATE MACHINE ****/
12
13 /* States are treated as events so that the event
14 * library can sequence them. Each state consists
15 * of an event, a job or process state, a pointer
16 * to the respective object, and a callback function
17 * to be executed for that state. Events can be defined
18 * at different priorities - e.g., SYS priority for
19 * events associated with launching jobs, and ERR priority
20 * for events associated with abnormal termination of
21 * a process.
22 *
23 * The state machine consists of a list of state objects,
24 * each defining a state-cbfunc pair. At startup, a default
25 * list is created by the base functions which is then
26 * potentially customized by selected components within
27 * the various ORTE frameworks. For example, a PLM component
28 * may need to insert states in the launch procedure, or may
29 * want to redirect a particular state callback to a custom
30 * function.
31 *
32 * For convenience, an ANY state can be defined along with a generic
33 * callback function, with the corresponding state object
34 * placed at the end of the state machine. Setting the
35 * machine to a state that has not been explicitly defined
36 * will cause this default action to be executed. Thus, you
37 * don't have to explicitly define a state-cbfunc pair
38 * for every job or process state.
39 */
40
41 #ifndef _ORTE_STATE_TYPES_H_
42 #define _ORTE_STATE_TYPES_H_
43
44 #include "orte_config.h"
45
46 #include "opal/class/opal_list.h"
47 #include "opal/mca/event/event.h"
48
49 #include "orte/mca/plm/plm_types.h"
50 #include "orte/runtime/orte_globals.h"
51
52 BEGIN_C_DECLS
53
54 typedef void (*orte_state_cbfunc_t)(int fd, short args, void* cb);
55
56 typedef struct {
57 opal_list_item_t super;
58 orte_job_state_t job_state;
59 orte_proc_state_t proc_state;
60 orte_state_cbfunc_t cbfunc;
61 int priority;
62 } orte_state_t;
63 ORTE_DECLSPEC OBJ_CLASS_DECLARATION(orte_state_t);
64
65 /* caddy for passing job and proc data to state event handlers */
66 typedef struct {
67 opal_object_t super;
68 opal_event_t ev;
69 orte_job_t *jdata;
70 orte_job_state_t job_state;
71 orte_process_name_t name;
72 orte_proc_state_t proc_state;
73 } orte_state_caddy_t;
74 ORTE_DECLSPEC OBJ_CLASS_DECLARATION(orte_state_caddy_t);
75
76 END_C_DECLS
77 #endif