/src/pacemaker/include/crm/common/actions_internal.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright 2004-2026 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__INCLUDED_CRM_COMMON_INTERNAL_H |
11 | | #error "Include <crm/common/internal.h> instead of <actions_internal.h> directly" |
12 | | #endif |
13 | | |
14 | | #ifndef PCMK__CRM_COMMON_ACTIONS_INTERNAL__H |
15 | | #define PCMK__CRM_COMMON_ACTIONS_INTERNAL__H |
16 | | |
17 | | #include <stdbool.h> // bool |
18 | | #include <stdint.h> // uint32_t, UINT32_C() |
19 | | #include <glib.h> // GList, GHashTable |
20 | | #include <libxml/tree.h> // xmlNode |
21 | | |
22 | | #include <crm/common/actions.h> // PCMK_ACTION_MONITOR |
23 | | #include <crm/common/roles.h> // enum rsc_role_e |
24 | | #include <crm/common/scheduler_types.h> // pcmk_resource_t, pcmk_node_t |
25 | | #include <crm/common/strings_internal.h> // pcmk__str_eq() |
26 | | |
27 | | #include <crm/common/strings_internal.h> // pcmk__str_any_of() |
28 | | |
29 | | #ifdef __cplusplus |
30 | | extern "C" { |
31 | | #endif |
32 | | |
33 | | //! printf-style format to create operation key from resource, action, interval |
34 | 0 | #define PCMK__OP_FMT "%s_%s_%u" |
35 | | |
36 | | /*! |
37 | | * \internal |
38 | | * \brief Set action flags for an action |
39 | | * |
40 | | * \param[in,out] action Action to set flags for |
41 | | * \param[in] flags_to_set Group of enum pcmk__action_flags to set |
42 | | */ |
43 | | #define pcmk__set_action_flags(action, flags_to_set) do { \ |
44 | | (action)->flags = pcmk__set_flags_as(__func__, __LINE__, \ |
45 | | LOG_TRACE, \ |
46 | | "Action", (action)->uuid, \ |
47 | | (action)->flags, \ |
48 | | (flags_to_set), \ |
49 | | #flags_to_set); \ |
50 | | } while (0) |
51 | | |
52 | | /*! |
53 | | * \internal |
54 | | * \brief Clear action flags for an action |
55 | | * |
56 | | * \param[in,out] action Action to clear flags for |
57 | | * \param[in] flags_to_clear Group of enum pcmk__action_flags to clear |
58 | | */ |
59 | | #define pcmk__clear_action_flags(action, flags_to_clear) do { \ |
60 | | (action)->flags = pcmk__clear_flags_as(__func__, __LINE__, \ |
61 | | LOG_TRACE, \ |
62 | | "Action", (action)->uuid, \ |
63 | | (action)->flags, \ |
64 | | (flags_to_clear), \ |
65 | | #flags_to_clear); \ |
66 | | } while (0) |
67 | | |
68 | | /*! |
69 | | * \internal |
70 | | * \brief Set action flags for a flag group |
71 | | * |
72 | | * \param[in,out] action_flags Flag group to set flags for |
73 | | * \param[in] action_name Name of action being modified (for logging) |
74 | | * \param[in] to_set Group of enum pcmk__action_flags to set |
75 | | */ |
76 | | #define pcmk__set_raw_action_flags(action_flags, action_name, to_set) do { \ |
77 | | action_flags = pcmk__set_flags_as(__func__, __LINE__, \ |
78 | | LOG_TRACE, "Action", action_name, \ |
79 | | (action_flags), \ |
80 | | (to_set), #to_set); \ |
81 | | } while (0) |
82 | | |
83 | | /*! |
84 | | * \internal |
85 | | * \brief Clear action flags for a flag group |
86 | | * |
87 | | * \param[in,out] action_flags Flag group to clear flags for |
88 | | * \param[in] action_name Name of action being modified (for logging) |
89 | | * \param[in] to_clear Group of enum pcmk__action_flags to clear |
90 | | */ |
91 | | #define pcmk__clear_raw_action_flags(action_flags, action_name, to_clear) \ |
92 | | do { \ |
93 | | action_flags = pcmk__clear_flags_as(__func__, __LINE__, LOG_TRACE, \ |
94 | | "Action", action_name, \ |
95 | | (action_flags), \ |
96 | | (to_clear), #to_clear); \ |
97 | | } while (0) |
98 | | |
99 | | // Possible actions (including some pseudo-actions) |
100 | | enum pcmk__action_type { |
101 | | pcmk__action_unspecified = 0, // Unspecified or unknown action |
102 | | pcmk__action_monitor, // Monitor |
103 | | |
104 | | // Each "completed" action must be the regular action plus 1 |
105 | | |
106 | | pcmk__action_stop, // Stop |
107 | | pcmk__action_stopped, // Stop completed |
108 | | |
109 | | pcmk__action_start, // Start |
110 | | pcmk__action_started, // Start completed |
111 | | |
112 | | pcmk__action_notify, // Notify |
113 | | pcmk__action_notified, // Notify completed |
114 | | |
115 | | pcmk__action_promote, // Promote |
116 | | pcmk__action_promoted, // Promoted |
117 | | |
118 | | pcmk__action_demote, // Demote |
119 | | pcmk__action_demoted, // Demoted |
120 | | |
121 | | pcmk__action_shutdown, // Shut down node |
122 | | pcmk__action_fence, // Fence node |
123 | | }; |
124 | | |
125 | | // Action scheduling flags |
126 | | enum pcmk__action_flags { |
127 | | // No action flags set (compare with equality rather than bit set) |
128 | | pcmk__no_action_flags = 0, |
129 | | |
130 | | // Whether action does not require invoking an agent |
131 | | pcmk__action_pseudo = (UINT32_C(1) << 0), |
132 | | |
133 | | // Whether action is runnable |
134 | | pcmk__action_runnable = (UINT32_C(1) << 1), |
135 | | |
136 | | // Whether action should not be executed |
137 | | pcmk__action_optional = (UINT32_C(1) << 2), |
138 | | |
139 | | // Whether action should be added to transition graph even if optional |
140 | | pcmk__action_always_in_graph = (UINT32_C(1) << 3), |
141 | | |
142 | | // Whether operation-specific instance attributes have been unpacked yet |
143 | | pcmk__action_attrs_evaluated = (UINT32_C(1) << 4), |
144 | | |
145 | | // Whether action is allowed to be part of a live migration |
146 | | pcmk__action_migratable = (UINT32_C(1) << 7), |
147 | | |
148 | | // Whether action has been added to transition graph |
149 | | pcmk__action_added_to_graph = (UINT32_C(1) << 8), |
150 | | |
151 | | // Whether action is a stop to abort a dangling migration |
152 | | pcmk__action_migration_abort = (UINT32_C(1) << 11), |
153 | | |
154 | | // Whether action is recurring monitor that must be rescheduled if active |
155 | | pcmk__action_reschedule = (UINT32_C(1) << 13), |
156 | | |
157 | | // Whether action has already been processed by a recursive procedure |
158 | | pcmk__action_detect_loop = (UINT32_C(1) << 14), |
159 | | |
160 | | // Whether action's inputs have been de-duplicated yet |
161 | | pcmk__action_inputs_deduplicated = (UINT32_C(1) << 15), |
162 | | |
163 | | // Whether action can be executed on DC rather than own node |
164 | | pcmk__action_on_dc = (UINT32_C(1) << 16), |
165 | | }; |
166 | | |
167 | | /* Possible responses to a resource action failure |
168 | | * |
169 | | * The order is significant; the values are in order of increasing severity so |
170 | | * that they can be compared with less than and greater than. |
171 | | */ |
172 | | enum pcmk__on_fail { |
173 | | pcmk__on_fail_ignore, // Act as if failure didn't happen |
174 | | pcmk__on_fail_demote, // Demote if promotable, else stop |
175 | | pcmk__on_fail_restart, // Restart resource |
176 | | |
177 | | /* Fence the remote node created by the resource if fencing is enabled, |
178 | | * otherwise attempt to restart the resource (used internally for some |
179 | | * remote connection failures). |
180 | | */ |
181 | | pcmk__on_fail_reset_remote, |
182 | | |
183 | | pcmk__on_fail_restart_container, // Restart resource's container |
184 | | pcmk__on_fail_ban, // Ban resource from current node |
185 | | pcmk__on_fail_block, // Treat resource as unmanaged |
186 | | pcmk__on_fail_stop, // Stop resource and leave stopped |
187 | | pcmk__on_fail_standby_node, // Put resource's node in standby |
188 | | pcmk__on_fail_fence_node, // Fence resource's node |
189 | | }; |
190 | | |
191 | | // What resource needs before it can be recovered from a failed node |
192 | | enum pcmk__requires { |
193 | | pcmk__requires_nothing = 0, // Resource can be recovered immediately |
194 | | pcmk__requires_quorum = 1, // Resource can be recovered if quorate |
195 | | pcmk__requires_fencing = 2, // Resource can be recovered after fencing |
196 | | }; |
197 | | |
198 | | // Implementation of pcmk_action_t |
199 | | struct pcmk__action { |
200 | | int id; // Counter to identify action |
201 | | |
202 | | /* |
203 | | * When the controller aborts a transition graph, it sets an abort priority. |
204 | | * If this priority is higher, the action will still be executed anyway. |
205 | | * Pseudo-actions are always allowed, so this is irrelevant for them. |
206 | | */ |
207 | | int priority; |
208 | | |
209 | | pcmk_resource_t *rsc; // Resource to apply action to, if any |
210 | | pcmk_node_t *node; // Copy of node to execute action on, if any |
211 | | xmlNode *op_entry; // Action XML configuration, if any |
212 | | char *task; // Action name |
213 | | char *uuid; // Action key |
214 | | char *cancel_task; // If task is "cancel", the action being cancelled |
215 | | char *reason; // Readable description of why action is needed |
216 | | uint32_t flags; // Group of enum pcmk__action_flags |
217 | | enum pcmk__requires needs; // Prerequisite for recovery |
218 | | enum pcmk__on_fail on_fail; // Response to failure |
219 | | enum rsc_role_e fail_role; // Resource role if action fails |
220 | | GHashTable *meta; // Meta-attributes relevant to action |
221 | | GHashTable *extra; // Action-specific instance attributes |
222 | | pcmk_scheduler_t *scheduler; // Scheduler data this action is part of |
223 | | |
224 | | /* Current count of runnable instance actions for "first" action in an |
225 | | * ordering dependency with pcmk__ar_min_runnable set. |
226 | | */ |
227 | | int runnable_before; |
228 | | |
229 | | /* |
230 | | * Number of instance actions for "first" action in an ordering dependency |
231 | | * with pcmk__ar_min_runnable set that must be runnable before this action |
232 | | * can be runnable. |
233 | | */ |
234 | | int required_runnable_before; |
235 | | |
236 | | // Actions in a relation with this one (as pcmk__related_action_t *) |
237 | | GList *actions_before; |
238 | | GList *actions_after; |
239 | | }; |
240 | | |
241 | | void pcmk__free_action(void *user_data); |
242 | | char *pcmk__op_key(const char *rsc_id, const char *op_type, |
243 | | unsigned int interval_ms); |
244 | | char *pcmk__notify_key(const char *rsc_id, const char *notify_type, |
245 | | const char *op_type); |
246 | | char *pcmk__transition_key(int transition_id, int action_id, int target_rc, |
247 | | const char *node); |
248 | | void pcmk__filter_op_for_digest(xmlNode *param_set); |
249 | | bool pcmk__is_fencing_action(const char *action); |
250 | | enum pcmk__action_type pcmk__parse_action(const char *action_name); |
251 | | const char *pcmk__action_text(enum pcmk__action_type action); |
252 | | const char *pcmk__on_fail_text(enum pcmk__on_fail on_fail); |
253 | | |
254 | | |
255 | | /*! |
256 | | * \internal |
257 | | * \brief Get a human-friendly action name |
258 | | * |
259 | | * \param[in] action_name Actual action name |
260 | | * \param[in] interval_ms Action interval (in milliseconds) |
261 | | * |
262 | | * \return Action name suitable for display |
263 | | */ |
264 | | static inline const char * |
265 | | pcmk__readable_action(const char *action_name, unsigned int interval_ms) |
266 | 0 | { |
267 | 0 | if ((interval_ms == 0) |
268 | 0 | && pcmk__str_eq(action_name, PCMK_ACTION_MONITOR, pcmk__str_none)) { |
269 | 0 | return "probe"; |
270 | 0 | } |
271 | 0 | return action_name; |
272 | 0 | } Unexecuted instantiation: scores_fuzzer.c:pcmk__readable_action Unexecuted instantiation: results.c:pcmk__readable_action Unexecuted instantiation: scores.c:pcmk__readable_action Unexecuted instantiation: strings.c:pcmk__readable_action Unexecuted instantiation: utils.c:pcmk__readable_action Unexecuted instantiation: iso8601.c:pcmk__readable_action Unexecuted instantiation: logging.c:pcmk__readable_action Unexecuted instantiation: mainloop.c:pcmk__readable_action Unexecuted instantiation: options.c:pcmk__readable_action Unexecuted instantiation: output.c:pcmk__readable_action Unexecuted instantiation: output_log.c:pcmk__readable_action Unexecuted instantiation: output_text.c:pcmk__readable_action Unexecuted instantiation: output_xml.c:pcmk__readable_action Unexecuted instantiation: patchset_display.c:pcmk__readable_action Unexecuted instantiation: schemas.c:pcmk__readable_action Unexecuted instantiation: xml.c:pcmk__readable_action Unexecuted instantiation: xml_attr.c:pcmk__readable_action Unexecuted instantiation: xml_comment.c:pcmk__readable_action Unexecuted instantiation: xml_display.c:pcmk__readable_action Unexecuted instantiation: xml_element.c:pcmk__readable_action Unexecuted instantiation: xml_idref.c:pcmk__readable_action Unexecuted instantiation: xml_io.c:pcmk__readable_action Unexecuted instantiation: xpath.c:pcmk__readable_action Unexecuted instantiation: acl.c:pcmk__readable_action Unexecuted instantiation: actions.c:pcmk__readable_action Unexecuted instantiation: agents.c:pcmk__readable_action Unexecuted instantiation: cmdline.c:pcmk__readable_action Unexecuted instantiation: digest.c:pcmk__readable_action Unexecuted instantiation: health.c:pcmk__readable_action Unexecuted instantiation: io.c:pcmk__readable_action Unexecuted instantiation: ipc_client.c:pcmk__readable_action Unexecuted instantiation: ipc_common.c:pcmk__readable_action Unexecuted instantiation: ipc_controld.c:pcmk__readable_action Unexecuted instantiation: ipc_pacemakerd.c:pcmk__readable_action Unexecuted instantiation: ipc_schedulerd.c:pcmk__readable_action Unexecuted instantiation: ipc_server.c:pcmk__readable_action Unexecuted instantiation: messages.c:pcmk__readable_action Unexecuted instantiation: nodes.c:pcmk__readable_action Unexecuted instantiation: nvpair.c:pcmk__readable_action Unexecuted instantiation: options_display.c:pcmk__readable_action Unexecuted instantiation: patchset.c:pcmk__readable_action Unexecuted instantiation: procfs.c:pcmk__readable_action Unexecuted instantiation: rules.c:pcmk__readable_action Unexecuted instantiation: servers.c:pcmk__readable_action Unexecuted instantiation: cib.c:pcmk__readable_action Unexecuted instantiation: ipc_attrd.c:pcmk__readable_action Unexecuted instantiation: pid.c:pcmk__readable_action Unexecuted instantiation: attrs.c:pcmk__readable_action Unexecuted instantiation: strings_fuzzer.c:pcmk__readable_action Unexecuted instantiation: cib_file_fuzzer.c:pcmk__readable_action Unexecuted instantiation: cib_client.c:pcmk__readable_action Unexecuted instantiation: cib_file.c:pcmk__readable_action Unexecuted instantiation: cib_native.c:pcmk__readable_action Unexecuted instantiation: cib_ops.c:pcmk__readable_action Unexecuted instantiation: cib_remote.c:pcmk__readable_action Unexecuted instantiation: cib_utils.c:pcmk__readable_action Unexecuted instantiation: remote.c:pcmk__readable_action Unexecuted instantiation: tls.c:pcmk__readable_action Unexecuted instantiation: watchdog.c:pcmk__readable_action Unexecuted instantiation: iso8601_fuzzer.c:pcmk__readable_action |
273 | | |
274 | | /*! |
275 | | * \internal |
276 | | * \brief Check whether an action raises a resource's role |
277 | | * |
278 | | * \param[in] action Action to check |
279 | | * |
280 | | * \return \c true if \p action is "start", "promote", or "migrate_from" |
281 | | */ |
282 | | static inline bool |
283 | | pcmk__is_up_action(const char *action) |
284 | 0 | { |
285 | 0 | return pcmk__str_any_of(action, PCMK_ACTION_START, PCMK_ACTION_PROMOTE, |
286 | 0 | PCMK_ACTION_MIGRATE_FROM, NULL); |
287 | 0 | } Unexecuted instantiation: scores_fuzzer.c:pcmk__is_up_action Unexecuted instantiation: results.c:pcmk__is_up_action Unexecuted instantiation: scores.c:pcmk__is_up_action Unexecuted instantiation: strings.c:pcmk__is_up_action Unexecuted instantiation: utils.c:pcmk__is_up_action Unexecuted instantiation: iso8601.c:pcmk__is_up_action Unexecuted instantiation: logging.c:pcmk__is_up_action Unexecuted instantiation: mainloop.c:pcmk__is_up_action Unexecuted instantiation: options.c:pcmk__is_up_action Unexecuted instantiation: output.c:pcmk__is_up_action Unexecuted instantiation: output_log.c:pcmk__is_up_action Unexecuted instantiation: output_text.c:pcmk__is_up_action Unexecuted instantiation: output_xml.c:pcmk__is_up_action Unexecuted instantiation: patchset_display.c:pcmk__is_up_action Unexecuted instantiation: schemas.c:pcmk__is_up_action Unexecuted instantiation: xml.c:pcmk__is_up_action Unexecuted instantiation: xml_attr.c:pcmk__is_up_action Unexecuted instantiation: xml_comment.c:pcmk__is_up_action Unexecuted instantiation: xml_display.c:pcmk__is_up_action Unexecuted instantiation: xml_element.c:pcmk__is_up_action Unexecuted instantiation: xml_idref.c:pcmk__is_up_action Unexecuted instantiation: xml_io.c:pcmk__is_up_action Unexecuted instantiation: xpath.c:pcmk__is_up_action Unexecuted instantiation: acl.c:pcmk__is_up_action Unexecuted instantiation: actions.c:pcmk__is_up_action Unexecuted instantiation: agents.c:pcmk__is_up_action Unexecuted instantiation: cmdline.c:pcmk__is_up_action Unexecuted instantiation: digest.c:pcmk__is_up_action Unexecuted instantiation: health.c:pcmk__is_up_action Unexecuted instantiation: io.c:pcmk__is_up_action Unexecuted instantiation: ipc_client.c:pcmk__is_up_action Unexecuted instantiation: ipc_common.c:pcmk__is_up_action Unexecuted instantiation: ipc_controld.c:pcmk__is_up_action Unexecuted instantiation: ipc_pacemakerd.c:pcmk__is_up_action Unexecuted instantiation: ipc_schedulerd.c:pcmk__is_up_action Unexecuted instantiation: ipc_server.c:pcmk__is_up_action Unexecuted instantiation: messages.c:pcmk__is_up_action Unexecuted instantiation: nodes.c:pcmk__is_up_action Unexecuted instantiation: nvpair.c:pcmk__is_up_action Unexecuted instantiation: options_display.c:pcmk__is_up_action Unexecuted instantiation: patchset.c:pcmk__is_up_action Unexecuted instantiation: procfs.c:pcmk__is_up_action Unexecuted instantiation: rules.c:pcmk__is_up_action Unexecuted instantiation: servers.c:pcmk__is_up_action Unexecuted instantiation: cib.c:pcmk__is_up_action Unexecuted instantiation: ipc_attrd.c:pcmk__is_up_action Unexecuted instantiation: pid.c:pcmk__is_up_action Unexecuted instantiation: attrs.c:pcmk__is_up_action Unexecuted instantiation: strings_fuzzer.c:pcmk__is_up_action Unexecuted instantiation: cib_file_fuzzer.c:pcmk__is_up_action Unexecuted instantiation: cib_client.c:pcmk__is_up_action Unexecuted instantiation: cib_file.c:pcmk__is_up_action Unexecuted instantiation: cib_native.c:pcmk__is_up_action Unexecuted instantiation: cib_ops.c:pcmk__is_up_action Unexecuted instantiation: cib_remote.c:pcmk__is_up_action Unexecuted instantiation: cib_utils.c:pcmk__is_up_action Unexecuted instantiation: remote.c:pcmk__is_up_action Unexecuted instantiation: tls.c:pcmk__is_up_action Unexecuted instantiation: watchdog.c:pcmk__is_up_action Unexecuted instantiation: iso8601_fuzzer.c:pcmk__is_up_action |
288 | | |
289 | | /*! |
290 | | * \internal |
291 | | * \brief Check whether an action lowers a resource's role |
292 | | * |
293 | | * \param[in] action Action to check |
294 | | * |
295 | | * \return \c true if \p action is "stop", "demote", or "migrate_to" |
296 | | */ |
297 | | static inline bool |
298 | | pcmk__is_down_action(const char *action) |
299 | 0 | { |
300 | 0 | return pcmk__str_any_of(action, PCMK_ACTION_STOP, PCMK_ACTION_DEMOTE, |
301 | 0 | PCMK_ACTION_MIGRATE_TO, NULL); |
302 | 0 | } Unexecuted instantiation: scores_fuzzer.c:pcmk__is_down_action Unexecuted instantiation: results.c:pcmk__is_down_action Unexecuted instantiation: scores.c:pcmk__is_down_action Unexecuted instantiation: strings.c:pcmk__is_down_action Unexecuted instantiation: utils.c:pcmk__is_down_action Unexecuted instantiation: iso8601.c:pcmk__is_down_action Unexecuted instantiation: logging.c:pcmk__is_down_action Unexecuted instantiation: mainloop.c:pcmk__is_down_action Unexecuted instantiation: options.c:pcmk__is_down_action Unexecuted instantiation: output.c:pcmk__is_down_action Unexecuted instantiation: output_log.c:pcmk__is_down_action Unexecuted instantiation: output_text.c:pcmk__is_down_action Unexecuted instantiation: output_xml.c:pcmk__is_down_action Unexecuted instantiation: patchset_display.c:pcmk__is_down_action Unexecuted instantiation: schemas.c:pcmk__is_down_action Unexecuted instantiation: xml.c:pcmk__is_down_action Unexecuted instantiation: xml_attr.c:pcmk__is_down_action Unexecuted instantiation: xml_comment.c:pcmk__is_down_action Unexecuted instantiation: xml_display.c:pcmk__is_down_action Unexecuted instantiation: xml_element.c:pcmk__is_down_action Unexecuted instantiation: xml_idref.c:pcmk__is_down_action Unexecuted instantiation: xml_io.c:pcmk__is_down_action Unexecuted instantiation: xpath.c:pcmk__is_down_action Unexecuted instantiation: acl.c:pcmk__is_down_action Unexecuted instantiation: actions.c:pcmk__is_down_action Unexecuted instantiation: agents.c:pcmk__is_down_action Unexecuted instantiation: cmdline.c:pcmk__is_down_action Unexecuted instantiation: digest.c:pcmk__is_down_action Unexecuted instantiation: health.c:pcmk__is_down_action Unexecuted instantiation: io.c:pcmk__is_down_action Unexecuted instantiation: ipc_client.c:pcmk__is_down_action Unexecuted instantiation: ipc_common.c:pcmk__is_down_action Unexecuted instantiation: ipc_controld.c:pcmk__is_down_action Unexecuted instantiation: ipc_pacemakerd.c:pcmk__is_down_action Unexecuted instantiation: ipc_schedulerd.c:pcmk__is_down_action Unexecuted instantiation: ipc_server.c:pcmk__is_down_action Unexecuted instantiation: messages.c:pcmk__is_down_action Unexecuted instantiation: nodes.c:pcmk__is_down_action Unexecuted instantiation: nvpair.c:pcmk__is_down_action Unexecuted instantiation: options_display.c:pcmk__is_down_action Unexecuted instantiation: patchset.c:pcmk__is_down_action Unexecuted instantiation: procfs.c:pcmk__is_down_action Unexecuted instantiation: rules.c:pcmk__is_down_action Unexecuted instantiation: servers.c:pcmk__is_down_action Unexecuted instantiation: cib.c:pcmk__is_down_action Unexecuted instantiation: ipc_attrd.c:pcmk__is_down_action Unexecuted instantiation: pid.c:pcmk__is_down_action Unexecuted instantiation: attrs.c:pcmk__is_down_action Unexecuted instantiation: strings_fuzzer.c:pcmk__is_down_action Unexecuted instantiation: cib_file_fuzzer.c:pcmk__is_down_action Unexecuted instantiation: cib_client.c:pcmk__is_down_action Unexecuted instantiation: cib_file.c:pcmk__is_down_action Unexecuted instantiation: cib_native.c:pcmk__is_down_action Unexecuted instantiation: cib_ops.c:pcmk__is_down_action Unexecuted instantiation: cib_remote.c:pcmk__is_down_action Unexecuted instantiation: cib_utils.c:pcmk__is_down_action Unexecuted instantiation: remote.c:pcmk__is_down_action Unexecuted instantiation: tls.c:pcmk__is_down_action Unexecuted instantiation: watchdog.c:pcmk__is_down_action Unexecuted instantiation: iso8601_fuzzer.c:pcmk__is_down_action |
303 | | |
304 | | #ifdef __cplusplus |
305 | | } |
306 | | #endif |
307 | | |
308 | | #endif // PCMK__CRM_COMMON_ACTIONS_INTERNAL__H |