include/corosync/votequorum.h
Go to the documentation of this file.
/*
* Copyright (c) 2009-2012 Red Hat, Inc.
*
* All rights reserved.
*
* Authors: Christine Caulfield (ccaulfie@redhat.com)
* Fabio M. Di Nitto (fdinitto@redhat.com)
*
* This software licensed under BSD license, the text of which follows:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* - Neither the name of the MontaVista Software, Inc. nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef COROSYNC_VOTEQUORUM_H_DEFINED
#define COROSYNC_VOTEQUORUM_H_DEFINED
#include <corosync/corotypes.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef uint64_t votequorum_handle_t;
#define VOTEQUORUM_INFO_TWONODE 1
#define VOTEQUORUM_INFO_QUORATE 2
#define VOTEQUORUM_INFO_WAIT_FOR_ALL 4
#define VOTEQUORUM_INFO_LAST_MAN_STANDING 8
#define VOTEQUORUM_INFO_AUTO_TIE_BREAKER 16
#define VOTEQUORUM_INFO_ALLOW_DOWNSCALE 32
#define VOTEQUORUM_INFO_QDEVICE_REGISTERED 64
#define VOTEQUORUM_INFO_QDEVICE_ALIVE 128
#define VOTEQUORUM_INFO_QDEVICE_CAST_VOTE 256
#define VOTEQUORUM_INFO_QDEVICE_MASTER_WINS 512
#define VOTEQUORUM_QDEVICE_NODEID 0
#define VOTEQUORUM_QDEVICE_MAX_NAME_LEN 255
#define VOTEQUORUM_QDEVICE_DEFAULT_TIMEOUT 10000
#define VOTEQUORUM_QDEVICE_DEFAULT_SYNC_TIMEOUT 30000
#define VOTEQUORUM_NODESTATE_MEMBER 1
#define VOTEQUORUM_NODESTATE_DEAD 2
#define VOTEQUORUM_NODESTATE_LEAVING 3
struct votequorum_info {
unsigned int node_id;
unsigned int node_state;
unsigned int node_votes;
unsigned int node_expected_votes;
unsigned int highest_expected;
unsigned int total_votes;
unsigned int quorum;
unsigned int flags;
unsigned int qdevice_votes;
char qdevice_name[VOTEQUORUM_QDEVICE_MAX_NAME_LEN];
};
typedef struct {
uint32_t nodeid;
uint32_t state;
} votequorum_node_t;
typedef struct {
uint32_t nodeid;
uint64_t seq;
} votequorum_ring_id_t;
typedef void (*votequorum_quorum_notification_fn_t) (
votequorum_handle_t handle,
uint64_t context,
uint32_t quorate,
uint32_t node_list_entries,
votequorum_node_t node_list[]);
typedef void (*votequorum_nodelist_notification_fn_t) (
votequorum_handle_t handle,
uint64_t context,
votequorum_ring_id_t ring_id,
uint32_t node_list_entries,
uint32_t node_list[]);
typedef void (*votequorum_expectedvotes_notification_fn_t) (
votequorum_handle_t handle,
uint64_t context,
uint32_t expected_votes);
typedef struct {
votequorum_quorum_notification_fn_t votequorum_quorum_notify_fn;
votequorum_expectedvotes_notification_fn_t votequorum_expectedvotes_notify_fn;
votequorum_nodelist_notification_fn_t votequorum_nodelist_notify_fn;
} votequorum_callbacks_t;
cs_error_t votequorum_initialize (
votequorum_handle_t *handle,
votequorum_callbacks_t *callbacks);
cs_error_t votequorum_finalize (
votequorum_handle_t handle);
cs_error_t votequorum_dispatch (
votequorum_handle_t handle,
cs_dispatch_flags_t dispatch_types);
cs_error_t votequorum_fd_get (
votequorum_handle_t handle,
int *fd);
cs_error_t votequorum_getinfo (
votequorum_handle_t handle,
unsigned int nodeid,
struct votequorum_info *info);
cs_error_t votequorum_setexpected (
votequorum_handle_t handle,
unsigned int expected_votes);
cs_error_t votequorum_setvotes (
votequorum_handle_t handle,
unsigned int nodeid,
unsigned int votes);
cs_error_t votequorum_trackstart (
votequorum_handle_t handle,
uint64_t context,
unsigned int flags);
cs_error_t votequorum_trackstop (
votequorum_handle_t handle);
cs_error_t votequorum_context_get (
votequorum_handle_t handle,
void **context);
cs_error_t votequorum_context_set (
votequorum_handle_t handle,
void *context);
cs_error_t votequorum_qdevice_register (
votequorum_handle_t handle,
const char *name);
cs_error_t votequorum_qdevice_unregister (
votequorum_handle_t handle,
const char *name);
cs_error_t votequorum_qdevice_update (
votequorum_handle_t handle,
const char *oldname,
const char *newname);
cs_error_t votequorum_qdevice_poll (
votequorum_handle_t handle,
const char *name,
unsigned int cast_vote,
votequorum_ring_id_t ring_id);
cs_error_t votequorum_qdevice_master_wins (
votequorum_handle_t handle,
const char *name,
unsigned int allow);
#ifdef __cplusplus
}
#endif
#endif /* COROSYNC_VOTEQUORUM_H_DEFINED */
nodeid
unsigned int nodeid
Definition: coroapi.h:0
corotypes.h
cs_dispatch_flags_t
cs_dispatch_flags_t
The cs_dispatch_flags_t enum.
Definition: corotypes.h:84
cs_error_t
cs_error_t
The cs_error_t enum.
Definition: corotypes.h:98
oldname
char oldname[VOTEQUORUM_QDEVICE_MAX_NAME_LEN]
Definition: exec/votequorum.c:1
flags
uint32_t flags
Definition: exec/votequorum.c:4
newname
char newname[VOTEQUORUM_QDEVICE_MAX_NAME_LEN]
Definition: exec/votequorum.c:2
votes
uint32_t votes
Definition: exec/votequorum.c:2
expected_votes
uint32_t expected_votes
Definition: exec/votequorum.c:3
votequorum_qdevice_register
cs_error_t votequorum_qdevice_register(votequorum_handle_t handle, const char *name)
Register a quorum device.
Definition: lib/votequorum.c:572
votequorum_setvotes
cs_error_t votequorum_setvotes(votequorum_handle_t handle, unsigned int nodeid, unsigned int votes)
set votes for a node
Definition: lib/votequorum.c:244
votequorum_nodelist_notification_fn_t
void(* votequorum_nodelist_notification_fn_t)(votequorum_handle_t handle, uint64_t context, votequorum_ring_id_t ring_id, uint32_t node_list_entries, uint32_t node_list[])
Definition: include/corosync/votequorum.h:114
votequorum_qdevice_master_wins
cs_error_t votequorum_qdevice_master_wins(votequorum_handle_t handle, const char *name, unsigned int allow)
Allow qdevice to tell votequorum if master_wins can be enabled or not.
Definition: lib/votequorum.c:669
votequorum_handle_t
uint64_t votequorum_handle_t
votequorum_handle_t
Definition: include/corosync/votequorum.h:48
votequorum_qdevice_poll
cs_error_t votequorum_qdevice_poll(votequorum_handle_t handle, const char *name, unsigned int cast_vote, votequorum_ring_id_t ring_id)
Poll a quorum device.
Definition: lib/votequorum.c:619
votequorum_quorum_notification_fn_t
void(* votequorum_quorum_notification_fn_t)(votequorum_handle_t handle, uint64_t context, uint32_t quorate, uint32_t node_list_entries, votequorum_node_t node_list[])
The votequorum_quorum_notification_fn_t callback.
Definition: include/corosync/votequorum.h:107
votequorum_context_get
cs_error_t votequorum_context_get(votequorum_handle_t handle, void **context)
Save and retrieve private data/context.
Definition: lib/votequorum.c:370
votequorum_finalize
cs_error_t votequorum_finalize(votequorum_handle_t handle)
Close the quorum handle.
Definition: lib/votequorum.c:119
votequorum_trackstop
cs_error_t votequorum_trackstop(votequorum_handle_t handle)
votequorum_trackstop
Definition: lib/votequorum.c:330
votequorum_qdevice_unregister
cs_error_t votequorum_qdevice_unregister(votequorum_handle_t handle, const char *name)
Unregister a quorum device.
Definition: lib/votequorum.c:767
votequorum_fd_get
cs_error_t votequorum_fd_get(votequorum_handle_t handle, int *fd)
Get a file descriptor on which to poll.
Definition: lib/votequorum.c:409
votequorum_context_set
cs_error_t votequorum_context_set(votequorum_handle_t handle, void *context)
votequorum_context_set
Definition: lib/votequorum.c:389
VOTEQUORUM_QDEVICE_MAX_NAME_LEN
#define VOTEQUORUM_QDEVICE_MAX_NAME_LEN
Definition: include/corosync/votequorum.h:62
votequorum_trackstart
cs_error_t votequorum_trackstart(votequorum_handle_t handle, uint64_t context, unsigned int flags)
Track node and quorum changes.
Definition: lib/votequorum.c:287
votequorum_qdevice_update
cs_error_t votequorum_qdevice_update(votequorum_handle_t handle, const char *oldname, const char *newname)
Update registered name of a quorum device.
Definition: lib/votequorum.c:717
votequorum_dispatch
cs_error_t votequorum_dispatch(votequorum_handle_t handle, cs_dispatch_flags_t dispatch_types)
Dispatch messages and configuration changes.
Definition: lib/votequorum.c:428
votequorum_expectedvotes_notification_fn_t
void(* votequorum_expectedvotes_notification_fn_t)(votequorum_handle_t handle, uint64_t context, uint32_t expected_votes)
The votequorum_expectedvotes_notification_fn_t callback.
Definition: include/corosync/votequorum.h:124
votequorum_getinfo
cs_error_t votequorum_getinfo(votequorum_handle_t handle, unsigned int nodeid, struct votequorum_info *info)
Get quorum information.
Definition: lib/votequorum.c:148
votequorum_setexpected
cs_error_t votequorum_setexpected(votequorum_handle_t handle, unsigned int expected_votes)
set expected_votes
Definition: lib/votequorum.c:202
votequorum_initialize
cs_error_t votequorum_initialize(votequorum_handle_t *handle, votequorum_callbacks_t *callbacks)
Create a new quorum connection.
Definition: lib/votequorum.c:72
quorate
uint32_t quorate
Definition: sam.c:134
votequorum_callbacks_t
The votequorum_callbacks_t struct.
Definition: include/corosync/votequorum.h:132
votequorum_callbacks_t::votequorum_nodelist_notify_fn
votequorum_nodelist_notification_fn_t votequorum_nodelist_notify_fn
Definition: include/corosync/votequorum.h:135
votequorum_callbacks_t::votequorum_expectedvotes_notify_fn
votequorum_expectedvotes_notification_fn_t votequorum_expectedvotes_notify_fn
Definition: include/corosync/votequorum.h:134
votequorum_callbacks_t::votequorum_quorum_notify_fn
votequorum_quorum_notification_fn_t votequorum_quorum_notify_fn
Definition: include/corosync/votequorum.h:133
votequorum_info
The votequorum_info struct.
Definition: include/corosync/votequorum.h:75
votequorum_info::qdevice_votes
unsigned int qdevice_votes
Definition: include/corosync/votequorum.h:84
votequorum_info::highest_expected
unsigned int highest_expected
Definition: include/corosync/votequorum.h:80
votequorum_info::qdevice_name
char qdevice_name[VOTEQUORUM_QDEVICE_MAX_NAME_LEN]
Definition: include/corosync/votequorum.h:85
votequorum_info::quorum
unsigned int quorum
Definition: include/corosync/votequorum.h:82
votequorum_info::flags
unsigned int flags
Definition: include/corosync/votequorum.h:83
votequorum_info::total_votes
unsigned int total_votes
Definition: include/corosync/votequorum.h:81
votequorum_info::node_expected_votes
unsigned int node_expected_votes
Definition: include/corosync/votequorum.h:79
votequorum_info::node_state
unsigned int node_state
Definition: include/corosync/votequorum.h:77
votequorum_info::node_votes
unsigned int node_votes
Definition: include/corosync/votequorum.h:78
votequorum_info::node_id
unsigned int node_id
Definition: include/corosync/votequorum.h:76
votequorum_node_t
The votequorum_node_t struct.
Definition: include/corosync/votequorum.h:91
votequorum_node_t::nodeid
uint32_t nodeid
Definition: include/corosync/votequorum.h:92
votequorum_node_t::state
uint32_t state
Definition: include/corosync/votequorum.h:93
votequorum_ring_id_t
The votequorum_ring_id_t struct.
Definition: include/corosync/votequorum.h:99
votequorum_ring_id_t::seq
uint64_t seq
Definition: include/corosync/votequorum.h:101
votequorum_ring_id_t::nodeid
uint32_t nodeid
Definition: include/corosync/votequorum.h:100
ring_id
struct memb_ring_id ring_id
Definition: totemsrp.c:4