pacemaker  2.1.2-ada5c3b36
Scalable High-Availability cluster resource manager
Macros | Functions | Variables
membership.c File Reference
#include <crm_internal.h>
#include <sys/param.h>
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <glib.h>
#include <crm/common/ipc.h>
#include <crm/common/xml_internal.h>
#include <crm/cluster/internal.h>
#include <crm/msg_xml.h>
#include <crm/stonith-ng.h>
#include "crmcluster_private.h"
#include <crm/cluster/compat.h>
Include dependency graph for membership.c:

Go to the source code of this file.

Macros

#define _GNU_SOURCE
 
#define set_peer_flags(peer, flags_to_set)
 
#define clear_peer_flags(peer, flags_to_clear)
 

Functions

int crm_remote_peer_cache_size (void)
 
crm_node_tcrm_remote_peer_get (const char *node_name)
 Get a remote node peer cache entry, creating it if necessary. More...
 
void crm_remote_peer_cache_remove (const char *node_name)
 
void crm_remote_peer_cache_refresh (xmlNode *cib)
 Repopulate the remote peer cache based on CIB XML. More...
 
gboolean crm_is_peer_active (const crm_node_t *node)
 
guint reap_crm_member (uint32_t id, const char *name)
 Remove all peer cache entries matching a node ID and/or uname. More...
 
guint crm_active_peers (void)
 
void crm_peer_init (void)
 
void crm_peer_destroy (void)
 
void crm_set_status_callback (void(*dispatch)(enum crm_status_type, crm_node_t *, const void *))
 Set a client function that will be called after peer status changes. More...
 
void crm_set_autoreap (gboolean autoreap)
 Tell the library whether to automatically reap lost nodes. More...
 
crm_node_tpcmk__search_node_caches (unsigned int id, const char *uname, uint32_t flags)
 
crm_node_tcrm_get_peer_full (unsigned int id, const char *uname, int flags)
 Get a node cache entry (cluster or Pacemaker Remote) More...
 
crm_node_tpcmk__search_cluster_node_cache (unsigned int id, const char *uname)
 
crm_node_tcrm_get_peer (unsigned int id, const char *uname)
 Get a cluster node cache entry. More...
 
crm_node_tcrm_update_peer_proc (const char *source, crm_node_t *node, uint32_t flag, const char *status)
 
void pcmk__update_peer_expected (const char *source, crm_node_t *node, const char *expected)
 
crm_node_tpcmk__update_peer_state (const char *source, crm_node_t *node, const char *state, uint64_t membership)
 Update a node's state and membership information. More...
 
void pcmk__reap_unseen_nodes (uint64_t membership)
 
void pcmk__refresh_node_caches_from_cib (xmlNode *cib)
 
crm_node_tpcmk__search_known_node_cache (unsigned int id, const char *uname, uint32_t flags)
 
int crm_terminate_member (int nodeid, const char *uname, void *unused)
 
int crm_terminate_member_no_mainloop (int nodeid, const char *uname, int *connection)
 

Variables

GHashTable * crm_peer_cache = NULL
 
GHashTable * crm_remote_peer_cache = NULL
 
unsigned long long crm_peer_seq = 0
 
gboolean crm_have_quorum = FALSE
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 13 of file membership.c.

◆ clear_peer_flags

#define clear_peer_flags (   peer,
  flags_to_clear 
)
Value:
do { \
(peer)->flags = pcmk__clear_flags_as(__func__, __LINE__, \
"Peer", (peer)->uname, \
(peer)->flags, (flags_to_clear), \
#flags_to_clear); \
} while (0)
#define LOG_TRACE
Definition: logging.h:36
uint64_t flags
Definition: remote.c:149

Definition at line 76 of file membership.c.

◆ set_peer_flags

#define set_peer_flags (   peer,
  flags_to_set 
)
Value:
do { \
(peer)->flags = pcmk__set_flags_as(__func__, __LINE__, LOG_TRACE, \
"Peer", (peer)->uname, \
(peer)->flags, (flags_to_set), \
#flags_to_set); \
} while (0)
#define LOG_TRACE
Definition: logging.h:36
uint64_t flags
Definition: remote.c:149

Definition at line 69 of file membership.c.

Function Documentation

◆ crm_active_peers()

guint crm_active_peers ( void  )

Definition at line 376 of file membership.c.

◆ crm_get_peer()

crm_node_t* crm_get_peer ( unsigned int  id,
const char *  uname 
)

Get a cluster node cache entry.

Parameters
[in]idIf not 0, cluster node ID to search for
[in]unameIf not NULL, node name to search for
Returns
(Possibly newly created) cluster node cache entry

Definition at line 702 of file membership.c.

◆ crm_get_peer_full()

crm_node_t* crm_get_peer_full ( unsigned int  id,
const char *  uname,
int  flags 
)

Get a node cache entry (cluster or Pacemaker Remote)

Parameters
[in]idIf not 0, cluster node ID to search for
[in]unameIf not NULL, node name to search for
[in]flagsBitmask of enum crm_get_peer_flags
Returns
(Possibly newly created) node cache entry

Definition at line 534 of file membership.c.

◆ crm_is_peer_active()

gboolean crm_is_peer_active ( const crm_node_t node)

Definition at line 283 of file membership.c.

◆ crm_peer_destroy()

void crm_peer_destroy ( void  )

Definition at line 417 of file membership.c.

◆ crm_peer_init()

void crm_peer_init ( void  )

Definition at line 401 of file membership.c.

◆ crm_remote_peer_cache_refresh()

void crm_remote_peer_cache_refresh ( xmlNode *  cib)

Repopulate the remote peer cache based on CIB XML.

Parameters
[in]xmlNodeCIB XML to parse

Definition at line 245 of file membership.c.

◆ crm_remote_peer_cache_remove()

void crm_remote_peer_cache_remove ( const char *  node_name)

Definition at line 147 of file membership.c.

◆ crm_remote_peer_cache_size()

int crm_remote_peer_cache_size ( void  )

Definition at line 87 of file membership.c.

◆ crm_remote_peer_get()

crm_node_t* crm_remote_peer_get ( const char *  node_name)

Get a remote node peer cache entry, creating it if necessary.

Parameters
[in]node_nameName of remote node
Returns
Cache entry for node on success, NULL (and set errno) otherwise
Note
When creating a new entry, this will leave the node state undetermined, so the caller should also call pcmk__update_peer_state() if the state is known.

Definition at line 107 of file membership.c.

◆ crm_set_autoreap()

void crm_set_autoreap ( gboolean  autoreap)

Tell the library whether to automatically reap lost nodes.

If TRUE (the default), calling crm_update_peer_proc() will also update the peer state to CRM_NODE_MEMBER or CRM_NODE_LOST, and pcmk__update_peer_state() will reap peers whose state changes to anything other than CRM_NODE_MEMBER. Callers should leave this enabled unless they plan to manage the cache separately on their own.

Parameters
[in]autoreapTRUE to enable automatic reaping, FALSE to disable

Definition at line 471 of file membership.c.

◆ crm_set_status_callback()

void crm_set_status_callback ( void(*)(enum crm_status_type, crm_node_t *, const void *)  dispatch)

Set a client function that will be called after peer status changes.

Parameters
[in]dispatchPointer to function to use as callback
Note
Previously, client callbacks were responsible for peer cache management. This is no longer the case, and client callbacks should do only client-specific handling. Callbacks MUST NOT add or remove entries in the peer caches.

Definition at line 454 of file membership.c.

◆ crm_terminate_member()

int crm_terminate_member ( int  nodeid,
const char *  uname,
void *  unused 
)

Definition at line 1296 of file membership.c.

◆ crm_terminate_member_no_mainloop()

int crm_terminate_member_no_mainloop ( int  nodeid,
const char *  uname,
int *  connection 
)

Definition at line 1302 of file membership.c.

◆ crm_update_peer_proc()

crm_node_t* crm_update_peer_proc ( const char *  source,
crm_node_t node,
uint32_t  flag,
const char *  status 
)

Definition at line 876 of file membership.c.

◆ pcmk__reap_unseen_nodes()

void pcmk__reap_unseen_nodes ( uint64_t  membership)

Definition at line 1092 of file membership.c.

◆ pcmk__refresh_node_caches_from_cib()

void pcmk__refresh_node_caches_from_cib ( xmlNode *  cib)

Definition at line 1248 of file membership.c.

◆ pcmk__search_cluster_node_cache()

crm_node_t* pcmk__search_cluster_node_cache ( unsigned int  id,
const char *  uname 
)

Definition at line 562 of file membership.c.

◆ pcmk__search_known_node_cache()

crm_node_t* pcmk__search_known_node_cache ( unsigned int  id,
const char *  uname,
uint32_t  flags 
)

Definition at line 1265 of file membership.c.

◆ pcmk__search_node_caches()

crm_node_t* pcmk__search_node_caches ( unsigned int  id,
const char *  uname,
uint32_t  flags 
)

Definition at line 506 of file membership.c.

◆ pcmk__update_peer_expected()

void pcmk__update_peer_expected ( const char *  source,
crm_node_t node,
const char *  expected 
)

Definition at line 963 of file membership.c.

◆ pcmk__update_peer_state()

crm_node_t* pcmk__update_peer_state ( const char *  source,
crm_node_t node,
const char *  state,
uint64_t  membership 
)

Update a node's state and membership information.

Parameters
[in]sourceCaller's function name (for log messages)
[in]nodeNode object to update
[in]stateNode's new state
[in]membershipNode's new membership ID
Returns
NULL if any node was reaped, value of node otherwise
Note
If this function returns NULL, the supplied node object was likely freed and should not be used again. This function should not be called within a cache iteration if reaping is possible, otherwise reaping could invalidate the iterator.

Definition at line 1079 of file membership.c.

◆ reap_crm_member()

guint reap_crm_member ( uint32_t  id,
const char *  name 
)

Remove all peer cache entries matching a node ID and/or uname.

Parameters
[in]idID of node to remove (or 0 to ignore)
[in]nameUname of node to remove (or NULL to ignore)
Returns
Number of cache entries removed

Definition at line 335 of file membership.c.

Variable Documentation

◆ crm_have_quorum

gboolean crm_have_quorum = FALSE

Definition at line 64 of file membership.c.

◆ crm_peer_cache

GHashTable* crm_peer_cache = NULL

Definition at line 36 of file membership.c.

◆ crm_peer_seq

unsigned long long crm_peer_seq = 0

Definition at line 63 of file membership.c.

◆ crm_remote_peer_cache

GHashTable* crm_remote_peer_cache = NULL

Definition at line 53 of file membership.c.