Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
CPG_M...ALIZE(3)   Corosync Cluster Engine Programmer's Manual	CPG_M...ALIZE(3)

NAME
     cpg_model_initialize - Create a new connection to the CPG service

SYNOPSIS
     #include <corosync/cpg.h>

     cs_error_t  cpg_model_initialize(cpg_handle_t  *handle,  cpg_model_t model,
     cpg_model_data_t *model_data, void *context);

DESCRIPTION
     The cpg_model_initialize function is used to initialize a connection to the
     closed process groups API.

     Each application may have several connections to the CPG API.  Each  appli-
     cation  uses  the handle argument to uniquely identify the connection.  The
     handle argument is then used in other function calls to identify  the  con-
     nection to be used for communication with the CPG service.

     Argument  model  is used to explicitly choose set of callbacks and internal
     parameters. Currently only model CPG_MODEL_V1 is defined.

     Callbacks and internal parameters are passed by model_data  argument.  This
     is  casted  pointer  (idea  is  similar  as in sockaddr function) to one of
     structures    corresponding    to	  chosen    model.    Currently     only
     cpg_model_v1_data_t is needed.

MODEL_V1
     The MODEL_V1 is backwards compatible with original callbacks initialized by
     cpg_initialize but new callback cpg_totem_confchg_fn is defined.

     Every  time  an  CPG event occurs within the joined group, one of the call-
     backs specified by the argument callbacks is called.   The  callback  func-
     tions are described by the following type definitions:

	    typedef void (*cpg_deliver_fn_t) (
		    cpg_handle_t handle,
		    const struct cpg_name *group_name,
		    uint32_t nodeid,
		    uint32_t pid,
		    const void *msg,
		    size_t msg_len);

	    typedef void (*cpg_confchg_fn_t) (
		    cpg_handle_t handle,
		    const struct cpg_name *group_name,
		    const struct cpg_address *member_list, size_t member_list_entries,
		    const struct cpg_address *left_list, size_t left_list_entries,
		    const struct cpg_address *joined_list, size_t joined_list_entries);

	    typedef void (*cpg_totem_confchg_fn_t) (
		    cpg_handle_t handle,
		    struct cpg_ring_id ring_id,
		    uint32_t member_list_entries,
		    const uint32_t *member_list);

     The cpg_model_v1_data_t structure is defined as:

	    typedef struct {
		    cpg_model_t model;
		    cpg_deliver_fn_t cpg_deliver_fn;
		    cpg_confchg_fn_t cpg_confchg_fn;
		    cpg_totem_confchg_fn_t cpg_totem_confchg_fn;
		    unsigned int flags;
	    } cpg_model_v1_data_t;

     When  a  configuration change occurs or a message is to be delivered one of
     the callbacks is called from the cpg_dispatch() function.	If a  configura-
     tion  change  occurs, cpg_confchg_fn is called.  If a delivery of a message
     occurs, cpg_deliver_fn is called.	When  totem  membership  change  occurs,
     cpg_totem_confchg_fn   is	called.  You  can  OR  CPG_MODEL_V1_DELIVER_INI-
     TIAL_TOTEM_CONF constant to flags	to  get  callback  after  first  confchg
     event.

     The cpg_address structure is defined

	    struct cpg_address {
		    unsigned int nodeid;
		    unsigned int pid;
		    unsigned int reason;
	    };

     where  nodeid  is a 32 bit unique node identifier, pid is the process ID of
     the process that has joined/left the group or sent the message, and  reason
     is  an  integer  code  indicating	why the node joined/left the group (this
     value is not set for the member_list items).

	    CPG_REASON_JOIN	 - the process joined a group using cpg_join().
	    CPG_REASON_LEAVE	 - the process left a group using cpg_leave()
	    CPG_REASON_NODEDOWN  - the process left a group because the node left the cluster.
	    CPG_REASON_NODEUP	 - the process joined a group because it was already a member of a group on a node that has just joined the cluster
	    CPG_REASON_PROCDOWN  - the process left a group without calling cpg_leave()
	    CPG_REASON_UNDEFINED - a special value used for the member_list items

     The cpg_ring_id structure is defined

	    struct cpg_ring_id {
		    uint32_t nodeid;
		    uint64_t seq;
	    };

     where nodeid is the current Totem leader and seq is an increasing number.

RETURN VALUE
     This call returns the CS_OK value if successful, otherwise an error is  re-
     turned.

ERRORS
     The errors are undocumented.

SEE ALSO
     cpg_overview(3),	 cpg_initialize(3),    cpg_finalize(3),   cpg_fd_get(3),
     cpg_dispatch(3), cpg_join(3), cpg_leave(3),  cpg_mcast_joined(3),	cpg_mem-
     bership_get(3)   cpg_zcb_alloc(3)	cpg_zcb_free(3)  cpg_zcb_mcast_joined(3)
     cpg_context_get(3) cpg_context_set(3)  cpg_local_get(3)  cpg_model_initial-
     ize(3)

     CS_ERR_TRY_AGAIN Resource temporarily unavailable

     CS_ERR_INVALID_PARAM Invalid argument

     CS_ERR_ACCESS Permission denied

     CS_ERR_LIBRARY The connection failed

     CS_ERR_INTERRUPT System call interrupted by a signal

     CS_ERR_NOT_SUPPORTED The requested protocol/functionality not supported

     CS_ERR_MESSAGE_ERROR Incorrect auth message received

     CS_ERR_NO_MEMORY Not enough memory to complete the requested task

corosync Man Page		   2024-07-15			CPG_M...ALIZE(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=cpg_model_initialize&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help