/src/pacemaker/include/crm/common/clone_internal.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright 2004-2025 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__CRM_COMMON_CLONE_INTERNAL__H |
11 | | #define PCMK__CRM_COMMON_CLONE_INTERNAL__H |
12 | | |
13 | | #include <stdio.h> // NULL |
14 | | #include <stdbool.h> // bool |
15 | | #include <stdint.h> // UINT32_C |
16 | | |
17 | | #include <crm/common/internal.h> // pcmk__is_set() |
18 | | #include <crm/common/scheduler_types.h> // pcmk_resource_t |
19 | | #include <crm/common/resources.h> // pcmk_rsc_unique, |
20 | | #include <crm/common/resources_internal.h> // pcmk__rsc_variant_clone etc. |
21 | | |
22 | | #ifdef __cplusplus |
23 | | extern "C" { |
24 | | #endif |
25 | | |
26 | | // Clone resource flags (used in variant data) |
27 | | enum pcmk__clone_flags { |
28 | | //! Whether instances should be started sequentially |
29 | | pcmk__clone_ordered = (UINT32_C(1) << 0), |
30 | | |
31 | | //! Whether promotion scores have been added |
32 | | pcmk__clone_promotion_added = (UINT32_C(1) << 1), |
33 | | |
34 | | //! Whether promotion constraints have been added |
35 | | pcmk__clone_promotion_constrained = (UINT32_C(1) << 2), |
36 | | }; |
37 | | |
38 | | /*! |
39 | | * \internal |
40 | | * \brief Check whether a resource is a clone resource |
41 | | * |
42 | | * \param[in] rsc Resource to check |
43 | | * |
44 | | * \return true if \p rsc is a clone, otherwise false |
45 | | * |
46 | | * \note This does not return true if \p rsc has a clone ancestor. |
47 | | */ |
48 | | static inline bool |
49 | | pcmk__is_clone(const pcmk_resource_t *rsc) |
50 | 0 | { |
51 | 0 | return (rsc != NULL) && (rsc->priv->variant == pcmk__rsc_variant_clone); |
52 | 0 | } Unexecuted instantiation: results.c:pcmk__is_clone Unexecuted instantiation: scores.c:pcmk__is_clone Unexecuted instantiation: strings.c:pcmk__is_clone Unexecuted instantiation: utils.c:pcmk__is_clone Unexecuted instantiation: iso8601.c:pcmk__is_clone Unexecuted instantiation: logging.c:pcmk__is_clone Unexecuted instantiation: mainloop.c:pcmk__is_clone Unexecuted instantiation: options.c:pcmk__is_clone Unexecuted instantiation: output.c:pcmk__is_clone Unexecuted instantiation: output_log.c:pcmk__is_clone Unexecuted instantiation: output_text.c:pcmk__is_clone Unexecuted instantiation: output_xml.c:pcmk__is_clone Unexecuted instantiation: patchset_display.c:pcmk__is_clone Unexecuted instantiation: schemas.c:pcmk__is_clone Unexecuted instantiation: xml.c:pcmk__is_clone Unexecuted instantiation: xml_attr.c:pcmk__is_clone Unexecuted instantiation: xml_comment.c:pcmk__is_clone Unexecuted instantiation: xml_display.c:pcmk__is_clone Unexecuted instantiation: xml_element.c:pcmk__is_clone Unexecuted instantiation: xml_idref.c:pcmk__is_clone Unexecuted instantiation: xml_io.c:pcmk__is_clone Unexecuted instantiation: xpath.c:pcmk__is_clone Unexecuted instantiation: acl.c:pcmk__is_clone Unexecuted instantiation: actions.c:pcmk__is_clone Unexecuted instantiation: agents.c:pcmk__is_clone Unexecuted instantiation: cmdline.c:pcmk__is_clone Unexecuted instantiation: digest.c:pcmk__is_clone Unexecuted instantiation: health.c:pcmk__is_clone Unexecuted instantiation: io.c:pcmk__is_clone Unexecuted instantiation: ipc_client.c:pcmk__is_clone Unexecuted instantiation: ipc_common.c:pcmk__is_clone Unexecuted instantiation: ipc_controld.c:pcmk__is_clone Unexecuted instantiation: ipc_pacemakerd.c:pcmk__is_clone Unexecuted instantiation: ipc_schedulerd.c:pcmk__is_clone Unexecuted instantiation: ipc_server.c:pcmk__is_clone Unexecuted instantiation: messages.c:pcmk__is_clone Unexecuted instantiation: nodes.c:pcmk__is_clone Unexecuted instantiation: nvpair.c:pcmk__is_clone Unexecuted instantiation: options_display.c:pcmk__is_clone Unexecuted instantiation: patchset.c:pcmk__is_clone Unexecuted instantiation: procfs.c:pcmk__is_clone Unexecuted instantiation: rules.c:pcmk__is_clone Unexecuted instantiation: servers.c:pcmk__is_clone Unexecuted instantiation: cib.c:pcmk__is_clone Unexecuted instantiation: ipc_attrd.c:pcmk__is_clone Unexecuted instantiation: pid.c:pcmk__is_clone Unexecuted instantiation: attrs.c:pcmk__is_clone Unexecuted instantiation: strings_fuzzer.c:pcmk__is_clone Unexecuted instantiation: cib_file_fuzzer.c:pcmk__is_clone Unexecuted instantiation: cib_client.c:pcmk__is_clone Unexecuted instantiation: cib_file.c:pcmk__is_clone Unexecuted instantiation: cib_native.c:pcmk__is_clone Unexecuted instantiation: cib_ops.c:pcmk__is_clone Unexecuted instantiation: cib_remote.c:pcmk__is_clone Unexecuted instantiation: cib_utils.c:pcmk__is_clone Unexecuted instantiation: remote.c:pcmk__is_clone Unexecuted instantiation: tls.c:pcmk__is_clone Unexecuted instantiation: watchdog.c:pcmk__is_clone |
53 | | |
54 | | /*! |
55 | | * \internal |
56 | | * \brief Check whether a resource is a globally unique clone |
57 | | * |
58 | | * \param[in] rsc Resource to check |
59 | | * |
60 | | * \return true if \p rsc is a unique clone, otherwise false |
61 | | */ |
62 | | static inline bool |
63 | | pcmk__is_unique_clone(const pcmk_resource_t *rsc) |
64 | 0 | { |
65 | 0 | return pcmk__is_clone(rsc) && pcmk__is_set(rsc->flags, pcmk__rsc_unique); |
66 | 0 | } Unexecuted instantiation: results.c:pcmk__is_unique_clone Unexecuted instantiation: scores.c:pcmk__is_unique_clone Unexecuted instantiation: strings.c:pcmk__is_unique_clone Unexecuted instantiation: utils.c:pcmk__is_unique_clone Unexecuted instantiation: iso8601.c:pcmk__is_unique_clone Unexecuted instantiation: logging.c:pcmk__is_unique_clone Unexecuted instantiation: mainloop.c:pcmk__is_unique_clone Unexecuted instantiation: options.c:pcmk__is_unique_clone Unexecuted instantiation: output.c:pcmk__is_unique_clone Unexecuted instantiation: output_log.c:pcmk__is_unique_clone Unexecuted instantiation: output_text.c:pcmk__is_unique_clone Unexecuted instantiation: output_xml.c:pcmk__is_unique_clone Unexecuted instantiation: patchset_display.c:pcmk__is_unique_clone Unexecuted instantiation: schemas.c:pcmk__is_unique_clone Unexecuted instantiation: xml.c:pcmk__is_unique_clone Unexecuted instantiation: xml_attr.c:pcmk__is_unique_clone Unexecuted instantiation: xml_comment.c:pcmk__is_unique_clone Unexecuted instantiation: xml_display.c:pcmk__is_unique_clone Unexecuted instantiation: xml_element.c:pcmk__is_unique_clone Unexecuted instantiation: xml_idref.c:pcmk__is_unique_clone Unexecuted instantiation: xml_io.c:pcmk__is_unique_clone Unexecuted instantiation: xpath.c:pcmk__is_unique_clone Unexecuted instantiation: acl.c:pcmk__is_unique_clone Unexecuted instantiation: actions.c:pcmk__is_unique_clone Unexecuted instantiation: agents.c:pcmk__is_unique_clone Unexecuted instantiation: cmdline.c:pcmk__is_unique_clone Unexecuted instantiation: digest.c:pcmk__is_unique_clone Unexecuted instantiation: health.c:pcmk__is_unique_clone Unexecuted instantiation: io.c:pcmk__is_unique_clone Unexecuted instantiation: ipc_client.c:pcmk__is_unique_clone Unexecuted instantiation: ipc_common.c:pcmk__is_unique_clone Unexecuted instantiation: ipc_controld.c:pcmk__is_unique_clone Unexecuted instantiation: ipc_pacemakerd.c:pcmk__is_unique_clone Unexecuted instantiation: ipc_schedulerd.c:pcmk__is_unique_clone Unexecuted instantiation: ipc_server.c:pcmk__is_unique_clone Unexecuted instantiation: messages.c:pcmk__is_unique_clone Unexecuted instantiation: nodes.c:pcmk__is_unique_clone Unexecuted instantiation: nvpair.c:pcmk__is_unique_clone Unexecuted instantiation: options_display.c:pcmk__is_unique_clone Unexecuted instantiation: patchset.c:pcmk__is_unique_clone Unexecuted instantiation: procfs.c:pcmk__is_unique_clone Unexecuted instantiation: rules.c:pcmk__is_unique_clone Unexecuted instantiation: servers.c:pcmk__is_unique_clone Unexecuted instantiation: cib.c:pcmk__is_unique_clone Unexecuted instantiation: ipc_attrd.c:pcmk__is_unique_clone Unexecuted instantiation: pid.c:pcmk__is_unique_clone Unexecuted instantiation: attrs.c:pcmk__is_unique_clone Unexecuted instantiation: strings_fuzzer.c:pcmk__is_unique_clone Unexecuted instantiation: cib_file_fuzzer.c:pcmk__is_unique_clone Unexecuted instantiation: cib_client.c:pcmk__is_unique_clone Unexecuted instantiation: cib_file.c:pcmk__is_unique_clone Unexecuted instantiation: cib_native.c:pcmk__is_unique_clone Unexecuted instantiation: cib_ops.c:pcmk__is_unique_clone Unexecuted instantiation: cib_remote.c:pcmk__is_unique_clone Unexecuted instantiation: cib_utils.c:pcmk__is_unique_clone Unexecuted instantiation: remote.c:pcmk__is_unique_clone Unexecuted instantiation: tls.c:pcmk__is_unique_clone Unexecuted instantiation: watchdog.c:pcmk__is_unique_clone |
67 | | |
68 | | /*! |
69 | | * \internal |
70 | | * \brief Check whether a resource is an anonymous clone |
71 | | * |
72 | | * \param[in] rsc Resource to check |
73 | | * |
74 | | * \return true if \p rsc is an anonymous clone, otherwise false |
75 | | */ |
76 | | static inline bool |
77 | | pcmk__is_anonymous_clone(const pcmk_resource_t *rsc) |
78 | 0 | { |
79 | 0 | return pcmk__is_clone(rsc) && !pcmk__is_set(rsc->flags, pcmk__rsc_unique); |
80 | 0 | } Unexecuted instantiation: results.c:pcmk__is_anonymous_clone Unexecuted instantiation: scores.c:pcmk__is_anonymous_clone Unexecuted instantiation: strings.c:pcmk__is_anonymous_clone Unexecuted instantiation: utils.c:pcmk__is_anonymous_clone Unexecuted instantiation: iso8601.c:pcmk__is_anonymous_clone Unexecuted instantiation: logging.c:pcmk__is_anonymous_clone Unexecuted instantiation: mainloop.c:pcmk__is_anonymous_clone Unexecuted instantiation: options.c:pcmk__is_anonymous_clone Unexecuted instantiation: output.c:pcmk__is_anonymous_clone Unexecuted instantiation: output_log.c:pcmk__is_anonymous_clone Unexecuted instantiation: output_text.c:pcmk__is_anonymous_clone Unexecuted instantiation: output_xml.c:pcmk__is_anonymous_clone Unexecuted instantiation: patchset_display.c:pcmk__is_anonymous_clone Unexecuted instantiation: schemas.c:pcmk__is_anonymous_clone Unexecuted instantiation: xml.c:pcmk__is_anonymous_clone Unexecuted instantiation: xml_attr.c:pcmk__is_anonymous_clone Unexecuted instantiation: xml_comment.c:pcmk__is_anonymous_clone Unexecuted instantiation: xml_display.c:pcmk__is_anonymous_clone Unexecuted instantiation: xml_element.c:pcmk__is_anonymous_clone Unexecuted instantiation: xml_idref.c:pcmk__is_anonymous_clone Unexecuted instantiation: xml_io.c:pcmk__is_anonymous_clone Unexecuted instantiation: xpath.c:pcmk__is_anonymous_clone Unexecuted instantiation: acl.c:pcmk__is_anonymous_clone Unexecuted instantiation: actions.c:pcmk__is_anonymous_clone Unexecuted instantiation: agents.c:pcmk__is_anonymous_clone Unexecuted instantiation: cmdline.c:pcmk__is_anonymous_clone Unexecuted instantiation: digest.c:pcmk__is_anonymous_clone Unexecuted instantiation: health.c:pcmk__is_anonymous_clone Unexecuted instantiation: io.c:pcmk__is_anonymous_clone Unexecuted instantiation: ipc_client.c:pcmk__is_anonymous_clone Unexecuted instantiation: ipc_common.c:pcmk__is_anonymous_clone Unexecuted instantiation: ipc_controld.c:pcmk__is_anonymous_clone Unexecuted instantiation: ipc_pacemakerd.c:pcmk__is_anonymous_clone Unexecuted instantiation: ipc_schedulerd.c:pcmk__is_anonymous_clone Unexecuted instantiation: ipc_server.c:pcmk__is_anonymous_clone Unexecuted instantiation: messages.c:pcmk__is_anonymous_clone Unexecuted instantiation: nodes.c:pcmk__is_anonymous_clone Unexecuted instantiation: nvpair.c:pcmk__is_anonymous_clone Unexecuted instantiation: options_display.c:pcmk__is_anonymous_clone Unexecuted instantiation: patchset.c:pcmk__is_anonymous_clone Unexecuted instantiation: procfs.c:pcmk__is_anonymous_clone Unexecuted instantiation: rules.c:pcmk__is_anonymous_clone Unexecuted instantiation: servers.c:pcmk__is_anonymous_clone Unexecuted instantiation: cib.c:pcmk__is_anonymous_clone Unexecuted instantiation: ipc_attrd.c:pcmk__is_anonymous_clone Unexecuted instantiation: pid.c:pcmk__is_anonymous_clone Unexecuted instantiation: attrs.c:pcmk__is_anonymous_clone Unexecuted instantiation: strings_fuzzer.c:pcmk__is_anonymous_clone Unexecuted instantiation: cib_file_fuzzer.c:pcmk__is_anonymous_clone Unexecuted instantiation: cib_client.c:pcmk__is_anonymous_clone Unexecuted instantiation: cib_file.c:pcmk__is_anonymous_clone Unexecuted instantiation: cib_native.c:pcmk__is_anonymous_clone Unexecuted instantiation: cib_ops.c:pcmk__is_anonymous_clone Unexecuted instantiation: cib_remote.c:pcmk__is_anonymous_clone Unexecuted instantiation: cib_utils.c:pcmk__is_anonymous_clone Unexecuted instantiation: remote.c:pcmk__is_anonymous_clone Unexecuted instantiation: tls.c:pcmk__is_anonymous_clone Unexecuted instantiation: watchdog.c:pcmk__is_anonymous_clone |
81 | | |
82 | | #ifdef __cplusplus |
83 | | } |
84 | | #endif |
85 | | |
86 | | #endif // PCMK__CRM_COMMON_CLONE_INTERNAL__H |