root/include/crm/cluster.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. crm_join_phase_str

   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__CRM_CLUSTER__H
  11 #  define PCMK__CRM_CLUSTER__H
  12 
  13 #  include <stdint.h>           // uint32_t, uint64_t
  14 #  include <glib.h>             // gboolean, GHashTable
  15 #  include <libxml/tree.h>      // xmlNode
  16 #  include <crm/common/xml.h>
  17 #  include <crm/common/util.h>
  18 
  19 #ifdef __cplusplus
  20 extern "C" {
  21 #endif
  22 
  23 #  if SUPPORT_COROSYNC
  24 #    include <corosync/cpg.h>
  25 #  endif
  26 
  27 // @COMPAT Make this internal when we can break API backward compatibility
  28 //! \deprecated Do not use (public access will be removed in a future release)
  29 extern gboolean crm_have_quorum;
  30 
  31 // @COMPAT Make this internal when we can break API backward compatibility
  32 //! \deprecated Do not use (public access will be removed in a future release)
  33 extern GHashTable *crm_peer_cache;
  34 
  35 // @COMPAT Make this internal when we can break API backward compatibility
  36 //! \deprecated Do not use (public access will be removed in a future release)
  37 extern GHashTable *crm_remote_peer_cache;
  38 
  39 // @COMPAT Make this internal when we can break API backward compatibility
  40 //! \deprecated Do not use (public access will be removed in a future release)
  41 extern unsigned long long crm_peer_seq;
  42 
  43 // @COMPAT Make this internal when we can break API backward compatibility
  44 //! \deprecated Do not use (public access will be removed in a future release)
  45 #define CRM_NODE_LOST      "lost"
  46 
  47 // @COMPAT Make this internal when we can break API backward compatibility
  48 //! \deprecated Do not use (public access will be removed in a future release)
  49 #define CRM_NODE_MEMBER    "member"
  50 
  51 // @COMPAT Make this internal when we can break API backward compatibility
  52 //!@{
  53 //! \deprecated Do not use (public access will be removed in a future release)
  54 enum crm_join_phase {
  55     /* @COMPAT: crm_join_nack_quiet can be replaced by crm_node_t:user_data
  56      *          at a compatibility break.
  57      */
  58     //! Not allowed to join, but don't send a nack message
  59     crm_join_nack_quiet = -2,
  60 
  61     crm_join_nack       = -1,
  62     crm_join_none       = 0,
  63     crm_join_welcomed   = 1,
  64     crm_join_integrated = 2,
  65     crm_join_finalized  = 3,
  66     crm_join_confirmed  = 4,
  67 };
  68 //!@}
  69 
  70 // @COMPAT Make this internal when we can break API backward compatibility
  71 //!@{
  72 //! \deprecated Do not use (public access will be removed in a future release)
  73 enum crm_node_flags {
  74     /* Node is not a cluster node and should not be considered for cluster
  75      * membership
  76      */
  77     crm_remote_node = (1U << 0),
  78 
  79     // Node's cache entry is dirty
  80     crm_node_dirty  = (1U << 1),
  81 };
  82 //!@}
  83 
  84 // @COMPAT Make this internal when we can break API backward compatibility
  85 //!@{
  86 //! \deprecated Do not use (public access will be removed in a future release)
  87 typedef struct crm_peer_node_s {
  88     char *uname;                // Node name as known to cluster
  89 
  90     /* @COMPAT This is less than ideal since the value is not a valid XML ID
  91      * (for Corosync, it's the string equivalent of the node's numeric node ID,
  92      * but XML IDs can't start with a number) and the three elements should have
  93      * different IDs.
  94      *
  95      * Ideally, we would use something like node-NODEID, node_state-NODEID, and
  96      * transient_attributes-NODEID as the element IDs. Unfortunately changing it
  97      * would be impractical due to backward compatibility; older nodes in a
  98      * rolling upgrade will always write and expect the value in the old format.
  99      *
 100      * This is also named poorly, since the value is not a UUID, but at least
 101      * that can be changed at an API compatibility break.
 102      */
 103     /*! Value of the PCMK_XA_ID XML attribute to use with the node's
 104      * PCMK_XE_NODE, PCMK_XE_NODE_STATE, and PCMK_XE_TRANSIENT_ATTRIBUTES
 105      * XML elements in the CIB
 106      */
 107     char *uuid;
 108 
 109     char *state;                // @TODO change to enum
 110     uint64_t flags;             // Bitmask of crm_node_flags
 111     uint64_t last_seen;         // Only needed by cluster nodes
 112     uint32_t processes;         // @TODO most not needed, merge into flags
 113 
 114     /* @TODO When we can break public API compatibility, we can make the rest of
 115      * these members separate structs and use void *cluster_data and
 116      * void *user_data here instead, to abstract the cluster layer further.
 117      */
 118 
 119     // Currently only needed by corosync stack
 120     uint32_t id;                // Node ID
 121     time_t when_lost;           // When CPG membership was last lost
 122 
 123     // Only used by controller
 124     enum crm_join_phase join;
 125     char *expected;
 126 
 127     time_t peer_lost;
 128     char *conn_host;
 129 
 130     time_t when_member;         // Since when node has been a cluster member
 131     time_t when_online;         // Since when peer has been online in CPG
 132 } crm_node_t;
 133 //!@}
 134 
 135 // Implementation of pcmk_cluster_t
 136 // @COMPAT Make this internal when we can break API backward compatibility
 137 //!@{
 138 //! \deprecated Do not use (public access will be removed in a future release)
 139 struct crm_cluster_s {
 140     char *uuid;
 141     char *uname;
 142     uint32_t nodeid;
 143 
 144     // NOTE: sbd (as of at least 1.5.2) uses this
 145     //! \deprecated Call pcmk_cluster_set_destroy_fn() to set this
 146     void (*destroy) (gpointer);
 147 
 148 #  if SUPPORT_COROSYNC
 149     /* @TODO When we can break public API compatibility, make these members a
 150      * separate struct and use void *cluster_data here instead, to abstract the
 151      * cluster layer further.
 152      */
 153     struct cpg_name group;
 154 
 155     // NOTE: sbd (as of at least 1.5.2) uses this
 156     /*!
 157      * \deprecated Call pcmk_cpg_set_deliver_fn() and pcmk_cpg_set_confchg_fn()
 158      *             to set these
 159      */
 160     cpg_callbacks_t cpg;
 161 
 162     cpg_handle_t cpg_handle;
 163 #  endif
 164 
 165 };
 166 //!@}
 167 
 168 //! Connection to a cluster layer
 169 typedef struct crm_cluster_s pcmk_cluster_t;
 170 
 171 int pcmk_cluster_connect(pcmk_cluster_t *cluster);
 172 int pcmk_cluster_disconnect(pcmk_cluster_t *cluster);
 173 
 174 pcmk_cluster_t *pcmk_cluster_new(void);
 175 void pcmk_cluster_free(pcmk_cluster_t *cluster);
 176 
 177 int pcmk_cluster_set_destroy_fn(pcmk_cluster_t *cluster, void (*fn)(gpointer));
 178 #if SUPPORT_COROSYNC
 179 int pcmk_cpg_set_deliver_fn(pcmk_cluster_t *cluster, cpg_deliver_fn_t fn);
 180 int pcmk_cpg_set_confchg_fn(pcmk_cluster_t *cluster, cpg_confchg_fn_t fn);
 181 #endif  // SUPPORT_COROSYNC
 182 
 183 /* @COMPAT Make this internal when we can break API backward compatibility. Also
 184  * evaluate whether we can drop this entirely. Since 2.0.0, we have sent only
 185  * messages with crm_class_cluster.
 186  */
 187 //!@{
 188 //! \deprecated Do not use (public access will be removed in a future release)
 189 enum crm_ais_msg_class {
 190     crm_class_cluster = 0,
 191 };
 192 //!@}
 193 
 194 // @COMPAT Make this internal when we can break API backward compatibility
 195 //!@{
 196 //! \deprecated Do not use (public access will be removed in a future release)
 197 enum crm_ais_msg_types {
 198     crm_msg_none     = 0,
 199     crm_msg_ais      = 1,   // Unused
 200     crm_msg_lrmd     = 2,
 201     crm_msg_cib      = 3,
 202     crm_msg_crmd     = 4,
 203     crm_msg_attrd    = 5,
 204     crm_msg_stonithd = 6,   // Unused
 205     crm_msg_te       = 7,   // Unused
 206     crm_msg_pe       = 8,   // Unused
 207     crm_msg_stonith_ng = 9,
 208 };
 209 //!@}
 210 
 211 // @COMPAT Make this internal when we can break API backward compatibility
 212 //!@{
 213 //! \deprecated Do not use (public access will be removed in a future release)
 214 enum crm_status_type {
 215     crm_status_uname,
 216     crm_status_nstate,
 217     crm_status_processes,
 218 };
 219 //!@}
 220 
 221 /*!
 222  * \enum pcmk_cluster_layer
 223  * \brief Types of cluster layer
 224  */
 225 enum pcmk_cluster_layer {
 226     pcmk_cluster_layer_unknown  = 1,    //!< Unknown cluster layer
 227     pcmk_cluster_layer_invalid  = 2,    //!< Invalid cluster layer
 228     pcmk_cluster_layer_corosync = 32,   //!< Corosync Cluster Engine
 229 };
 230 
 231 enum pcmk_cluster_layer pcmk_get_cluster_layer(void);
 232 const char *pcmk_cluster_layer_text(enum pcmk_cluster_layer layer);
 233 
 234 /*
 235  * \brief Get log-friendly string equivalent of a join phase
 236  *
 237  * \param[in] phase  Join phase
 238  *
 239  * \return Log-friendly string equivalent of \p phase
 240  */
 241 //! \deprecated Do not use (public access will be removed in a future release)
 242 static inline const char *
 243 crm_join_phase_str(enum crm_join_phase phase)
     /* [previous][next][first][last][top][bottom][index][help] */
 244 {
 245     switch (phase) {
 246         case crm_join_nack_quiet:   return "nack_quiet";
 247         case crm_join_nack:         return "nack";
 248         case crm_join_none:         return "none";
 249         case crm_join_welcomed:     return "welcomed";
 250         case crm_join_integrated:   return "integrated";
 251         case crm_join_finalized:    return "finalized";
 252         case crm_join_confirmed:    return "confirmed";
 253         default:                    return "invalid";
 254     }
 255 }
 256 
 257 #if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1)
 258 #include <crm/cluster/compat.h>
 259 #endif
 260 
 261 #ifdef __cplusplus
 262 }
 263 #endif
 264 
 265 #endif

/* [previous][next][first][last][top][bottom][index][help] */