From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13826 invoked by alias); 13 Feb 2009 18:19:27 -0000 Received: (qmail 13820 invoked by alias); 13 Feb 2009 18:19:27 -0000 X-SWARE-Spam-Status: No, hits=-1.7 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS X-Spam-Status: No, hits=-1.7 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bastion.fedora.phx.redhat.com Subject: dlm: master - dlm_controld: use quorum instead of votequorum To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: dlm.git X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 5045786d61b87eae5d1c3a9fe2e23e00e2da36ac X-Git-Newrev: c62232d499fa1e33c9289cc7591a74610bd8b033 From: David Teigland Message-Id: <20090213181900.C87411201EC@lists.fedorahosted.org> Date: Fri, 13 Feb 2009 18:19:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2009-q1/txt/msg00452.txt.bz2 Gitweb: http://git.fedorahosted.org/git/dlm.git?p=dlm.git;a=commitdiff;h=c62232d499fa1e33c9289cc7591a74610bd8b033 Commit: c62232d499fa1e33c9289cc7591a74610bd8b033 Parent: 5045786d61b87eae5d1c3a9fe2e23e00e2da36ac Author: David Teigland AuthorDate: Fri Feb 13 12:16:03 2009 -0600 Committer: David Teigland CommitterDate: Fri Feb 13 12:16:03 2009 -0600 dlm_controld: use quorum instead of votequorum The "quorum" api is the more general one. Signed-off-by: David Teigland --- group/dlm_controld/Makefile | 2 +- group/dlm_controld/dlm_daemon.h | 2 +- group/dlm_controld/member_cman.c | 116 +++++++++++++++++++------------------- 3 files changed, 60 insertions(+), 60 deletions(-) diff --git a/group/dlm_controld/Makefile b/group/dlm_controld/Makefile index 9e1f9e4..c93caf0 100644 --- a/group/dlm_controld/Makefile +++ b/group/dlm_controld/Makefile @@ -47,7 +47,7 @@ CFLAGS += -I${incdir} LDFLAGS += -L${dlmlibdir} -ldlm LDFLAGS += -L${logtlibdir} -llogthread LDFLAGS += -L${openaislibdir} -lSaCkpt -LDFLAGS += -L${corosynclibdir} -lcpg -lcfg -lvotequorum +LDFLAGS += -L${corosynclibdir} -lcpg -lcfg -lquorum LDFLAGS += -L${libdir} PCMK_LDFLAGS += -lcib -lcrmcommon -lcrmcluster -ltotem_pg diff --git a/group/dlm_controld/dlm_daemon.h b/group/dlm_controld/dlm_daemon.h index 5d4ce37..99cb44e 100644 --- a/group/dlm_controld/dlm_daemon.h +++ b/group/dlm_controld/dlm_daemon.h @@ -269,7 +269,7 @@ int setup_cluster(void); void close_cluster(void); void process_cluster(int ci); void update_cluster(void); -int is_cluster_member(int nodeid); +int is_cluster_member(uint32_t nodeid); int setup_cluster_cfg(void); void close_cluster_cfg(void); void process_cluster_cfg(int ci); diff --git a/group/dlm_controld/member_cman.c b/group/dlm_controld/member_cman.c index 96cacf2..6d2f0ca 100644 --- a/group/dlm_controld/member_cman.c +++ b/group/dlm_controld/member_cman.c @@ -2,14 +2,14 @@ #include "config.h" #include #include -#include +#include #include "libfenced.h" static corosync_cfg_handle_t ch; -static votequorum_handle_t qh; -static votequorum_node_t old_nodes[MAX_NODES]; +static quorum_handle_t qh; +static uint32_t old_nodes[MAX_NODES]; static int old_node_count; -static votequorum_node_t quorum_nodes[MAX_NODES]; +static uint32_t quorum_nodes[MAX_NODES]; static int quorum_node_count; void kick_node_from_cluster(int nodeid) @@ -25,23 +25,23 @@ void kick_node_from_cluster(int nodeid) } } -static int is_member(votequorum_node_t *node_list, int count, int nodeid) +static int is_member(uint32_t *node_list, int count, uint32_t nodeid) { int i; for (i = 0; i < count; i++) { - if (node_list[i].nodeid == nodeid) - return (node_list[i].state == NODESTATE_MEMBER); + if (node_list[i] == nodeid) + return 1; } return 0; } -static int is_old_member(int nodeid) +static int is_old_member(uint32_t nodeid) { return is_member(old_nodes, old_node_count, nodeid); } -int is_cluster_member(int nodeid) +int is_cluster_member(uint32_t nodeid) { return is_member(quorum_nodes, quorum_node_count, nodeid); } @@ -60,9 +60,9 @@ static void cman_callback(cman_handle_t h, void *private, int reason, int arg) /* add a configfs dir for cluster members that don't have one, del the configfs dir for cluster members that are now gone */ -static void quorum_callback(votequorum_handle_t h, uint64_t context, - uint32_t quorate, uint32_t node_list_entries, - votequorum_node_t node_list[]) +static void quorum_callback(quorum_handle_t h, uint32_t quorate, + uint64_t ring_seq, uint32_t node_list_entries, + uint32_t *node_list) { corosync_cfg_node_address_t addrs[MAX_NODE_ADDRESSES]; corosync_cfg_node_address_t *addrptr = addrs; @@ -77,63 +77,50 @@ static void quorum_callback(votequorum_handle_t h, uint64_t context, quorum_node_count = 0; memset(&quorum_nodes, 0, sizeof(quorum_nodes)); - for (i = 0; i < node_list_entries; i++) { - if (node_list[i].state == NODESTATE_MEMBER) { - memcpy(&quorum_nodes[quorum_node_count], - &node_list[i], sizeof(votequorum_node_t)); - quorum_node_count++; - } - } + for (i = 0; i < node_list_entries; i++) + quorum_nodes[quorum_node_count++] = node_list[i]; for (i = 0; i < old_node_count; i++) { - if ((old_nodes[i].state == NODESTATE_MEMBER) && - !is_cluster_member(old_nodes[i].nodeid)) { - - log_debug("quorum: node %d removed", - old_nodes[i].nodeid); - - del_configfs_node(old_nodes[i].nodeid); + if (!is_cluster_member(old_nodes[i])) { + log_debug("quorum: node %u removed", old_nodes[i]); + del_configfs_node(old_nodes[i]); } } for (i = 0; i < quorum_node_count; i++) { - if ((quorum_nodes[i].state == NODESTATE_MEMBER) && - !is_old_member(quorum_nodes[i].nodeid)) { + if (!is_old_member(quorum_nodes[i])) { + log_debug("quorum: node %u added", quorum_nodes[i]); - log_debug("quorum: node %d added", - quorum_nodes[i].nodeid); - - err = corosync_cfg_get_node_addrs(ch, - quorum_nodes[i].nodeid, - MAX_NODE_ADDRESSES, - &num_addrs, addrs); + err = corosync_cfg_get_node_addrs(ch, quorum_nodes[i], + MAX_NODE_ADDRESSES, + &num_addrs, addrs); if (err != CS_OK) { log_error("corosync_cfg_get_node_addrs failed " - "nodeid %d", quorum_nodes[i].nodeid); + "nodeid %u", quorum_nodes[i]); continue; } for (j = 0; j < num_addrs; j++) { - add_configfs_node(quorum_nodes[i].nodeid, + add_configfs_node(quorum_nodes[i], addrptr[j].address, addrptr[j].address_length, - (quorum_nodes[i].nodeid == + (quorum_nodes[i] == our_nodeid)); } } } } -static votequorum_callbacks_t quorum_callbacks = +static quorum_callbacks_t quorum_callbacks = { - .votequorum_notify_fn = quorum_callback, + .quorum_notify_fn = quorum_callback, }; void process_cluster(int ci) { cs_error_t err; - err = votequorum_dispatch(qh, CS_DISPATCH_ALL); + err = quorum_dispatch(qh, CS_DISPATCH_ALL); if (err != CS_OK) cluster_dead(0); } @@ -143,33 +130,33 @@ void update_cluster(void) { cs_error_t err; - err = votequorum_dispatch(qh, CS_DISPATCH_ONE); + err = quorum_dispatch(qh, CS_DISPATCH_ONE); if (err != CS_OK) cluster_dead(0); } int setup_cluster(void) { - struct votequorum_info qinfo; cs_error_t err; int fd; - err = votequorum_initialize(&qh, &quorum_callbacks); - if (err != CS_OK) + err = quorum_initialize(&qh, &quorum_callbacks); + if (err != CS_OK) { + log_error("quorum init error %d", err); return -1; + } - err = votequorum_fd_get(qh, &fd); - if (err != CS_OK) - goto fail; - - err = votequorum_getinfo(qh, 0, &qinfo); - if (err != CS_OK) + err = quorum_fd_get(qh, &fd); + if (err != CS_OK) { + log_error("quorum fd_get error %d", err); goto fail; - our_nodeid = qinfo.node_id; + } - err = votequorum_trackstart(qh, 0, CS_TRACK_CURRENT); - if (err != CS_OK) + err = quorum_trackstart(qh, CS_TRACK_CURRENT); + if (err != CS_OK) { + log_error("quorum trackstart error %d", err); goto fail; + } old_node_count = 0; memset(&old_nodes, 0, sizeof(old_nodes)); @@ -178,14 +165,14 @@ int setup_cluster(void) return fd; fail: - votequorum_finalize(qh); + quorum_finalize(qh); return -1; } void close_cluster(void) { - votequorum_trackstop(qh); - votequorum_finalize(qh); + quorum_trackstop(qh); + quorum_finalize(qh); } static void shutdown_callback(corosync_cfg_handle_t h, @@ -221,17 +208,30 @@ void process_cluster_cfg(int ci) int setup_cluster_cfg(void) { cs_error_t err; + unsigned int nodeid; int fd; err = corosync_cfg_initialize(&ch, &cfg_callbacks); - if (err != CS_OK) + if (err != CS_OK) { + log_error("corosync cfg init error %d", err); return -1; + } err = corosync_cfg_fd_get(ch, &fd); if (err != CS_OK) { + log_error("corosync cfg fd_get error %d", err); + corosync_cfg_finalize(ch); + return -1; + } + + err = corosync_cfg_local_get(ch, &nodeid); + if (err != CS_OK) { + log_error("corosync cfg local_get error %d", err); corosync_cfg_finalize(ch); return -1; } + our_nodeid = nodeid; + log_debug("our_nodeid %d", our_nodeid); return fd; }