pacemaker 3.0.1-16e74fc4da
Scalable High-Availability cluster resource manager
Loading...
Searching...
No Matches
pcmki_transition.h
Go to the documentation of this file.
1/*
2 * Copyright 2004-2024 the Pacemaker project contributors
3 *
4 * The version control history for this file may have further details.
5 *
6 * This source code is licensed under the GNU Lesser General Public License
7 * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
8 */
9
10#ifndef PCMK__PCMKI_PCMKI_TRANSITION__H
11#define PCMK__PCMKI_PCMKI_TRANSITION__H
12
13#include <stdbool.h> // bool
14#include <stdint.h> // uint32_t
15#include <sys/types.h> // time_t
16#include <glib.h> // guint, GList, GHashTable
17#include <libxml/tree.h> // xmlNode
18
19#include <crm/common/scheduler_types.h> // pcmk_scheduler_t
20#include <crm/lrmd_events.h> // lrmd_event_data_t
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
30 /* @TODO maybe separate a new pcmk__fencing_graph_action from
31 * pcmk__cluster_graph_action to make code cleaner (for example, see
32 * initiate_action())
33 */
34};
35
42
43typedef struct {
44 int id;
46
47 uint32_t flags; // Group of pcmk__synapse_flags
48
49 GList *actions; /* pcmk__graph_action_t* */
50 GList *inputs; /* pcmk__graph_action_t* */
52
53#define pcmk__set_synapse_flags(synapse, flags_to_set) do { \
54 (synapse)->flags = pcmk__set_flags_as(__func__, __LINE__, \
55 LOG_TRACE, \
56 "Synapse", "synapse", \
57 (synapse)->flags, (flags_to_set), #flags_to_set); \
58 } while (0)
59
60#define pcmk__clear_synapse_flags(synapse, flags_to_clear) do { \
61 (synapse)->flags = pcmk__clear_flags_as(__func__, __LINE__, \
62 LOG_TRACE, \
63 "Synapse", "synapse", \
64 (synapse)->flags, (flags_to_clear), #flags_to_clear); \
65 } while (0)
66
68 pcmk__graph_action_sent_update = (1 << 0), /* sent to the CIB */
69 pcmk__graph_action_executed = (1 << 1), /* sent to the CRM */
72};
73
74typedef struct {
75 int id;
77 int timer;
79 GHashTable *params;
82
83 uint32_t flags; // Group of pcmk__graph_action_flags
84
85 xmlNode *xml;
86
88
89#define pcmk__set_graph_action_flags(action, flags_to_set) do { \
90 (action)->flags = pcmk__set_flags_as(__func__, __LINE__, \
91 LOG_TRACE, \
92 "Action", "action", \
93 (action)->flags, (flags_to_set), #flags_to_set); \
94 } while (0)
95
96#define pcmk__clear_graph_action_flags(action, flags_to_clear) do { \
97 (action)->flags = pcmk__clear_flags_as(__func__, __LINE__, \
98 LOG_TRACE, \
99 "Action", "action", \
100 (action)->flags, (flags_to_clear), #flags_to_clear); \
101 } while (0)
102
103// What to do after finished processing a transition graph
105 // Order matters: lowest priority to highest
106 pcmk__graph_done, // Transition complete, nothing further needed
107 pcmk__graph_wait, // Transition interrupted, wait for further changes
108 pcmk__graph_restart, // Transition interrupted, start a new one
109 pcmk__graph_shutdown, // Transition interrupted, local shutdown needed
110};
111
112typedef struct {
113 int id;
114 char *source;
116
118 const char *abort_reason;
120
123
127
128 int fired;
133
134 GList *synapses; /* pcmk__graph_synapse_t* */
135
137
140
143
147
148
149typedef struct {
150 int (*pseudo) (pcmk__graph_t *graph, pcmk__graph_action_t *action);
152 int (*cluster) (pcmk__graph_t *graph, pcmk__graph_action_t *action);
154 bool (*allowed) (pcmk__graph_t *graph, pcmk__graph_action_t *action);
156
158 pcmk__graph_active, // Some actions have been performed
159 pcmk__graph_pending, // No actions performed yet
162};
163
165pcmk__graph_t *pcmk__unpack_graph(const xmlNode *xml_graph,
166 const char *reference);
171const char *pcmk__graph_status2text(enum pcmk__graph_status state);
172void pcmk__log_graph(unsigned int log_level, pcmk__graph_t *graph);
175 const char *filename);
176lrmd_event_data_t *pcmk__event_from_graph_action(const xmlNode *resource,
178 int status, int rc,
179 const char *exit_reason);
180
181#ifdef __cplusplus
182}
183#endif
184
185#endif // PCMK__PCMKI_PCMKI_TRANSITION__H
Resource agent executor events.
pcmk_scheduler_t * scheduler
const char * action
Definition pcmk_fence.c:32
pcmk__graph_action_flags
@ pcmk__graph_action_confirmed
@ pcmk__graph_action_sent_update
@ pcmk__graph_action_failed
@ pcmk__graph_action_executed
pcmk__graph_next
@ pcmk__graph_done
@ pcmk__graph_restart
@ pcmk__graph_shutdown
@ pcmk__graph_wait
void pcmk__free_graph(pcmk__graph_t *graph)
void pcmk__log_graph_action(int log_level, pcmk__graph_action_t *action)
pcmk__graph_t * pcmk__unpack_graph(const xmlNode *xml_graph, const char *reference)
void pcmk__set_graph_functions(pcmk__graph_functions_t *fns)
const char * pcmk__graph_status2text(enum pcmk__graph_status state)
pcmk__synapse_flags
@ pcmk__synapse_ready
@ pcmk__synapse_executed
@ pcmk__synapse_confirmed
@ pcmk__synapse_failed
enum pcmk__graph_status pcmk__execute_graph(pcmk__graph_t *graph)
lrmd_event_data_t * pcmk__event_from_graph_action(const xmlNode *resource, const pcmk__graph_action_t *action, int status, int rc, const char *exit_reason)
void pcmk__log_transition_summary(const pcmk_scheduler_t *scheduler, const char *filename)
pcmk__graph_status
@ pcmk__graph_pending
@ pcmk__graph_terminated
@ pcmk__graph_active
@ pcmk__graph_complete
void pcmk__update_graph(pcmk__graph_t *graph, const pcmk__graph_action_t *action)
void pcmk__log_graph(unsigned int log_level, pcmk__graph_t *graph)
pcmk__graph_action_type
@ pcmk__pseudo_graph_action
@ pcmk__cluster_graph_action
@ pcmk__rsc_graph_action
Type aliases needed to define scheduler objects.
enum pcmk__graph_action_type type
pcmk__graph_synapse_t * synapse
char * failed_stop_offset
Failcount after one failed stop action.
time_t recheck_by
Time (from epoch) by which the controller should re-run the scheduler.
enum pcmk__graph_next completion_action
char * failed_start_offset
Failcount after one failed start action.
const char * abort_reason