This is the mail archive of the
cluster-cvs@sourceware.org
mailing list for the cluster.
fence: master - fenced: use quorum instead of votequorum
- From: David Teigland <teigland at fedoraproject dot org>
- To: cluster-cvs-relay at redhat dot com
- Date: Fri, 13 Feb 2009 21:51:45 +0000 (UTC)
- Subject: fence: master - fenced: use quorum instead of votequorum
Gitweb: http://git.fedorahosted.org/git/fence.git?p=fence.git;a=commitdiff;h=9e129822c42208bed59340f195b02bfe1ef30d71
Commit: 9e129822c42208bed59340f195b02bfe1ef30d71
Parent: 7cc4bcfa3a5803cf247ccc8ebe3b4b2bc01ffdaa
Author: David Teigland <teigland@redhat.com>
AuthorDate: Fri Feb 13 15:49:43 2009 -0600
Committer: David Teigland <teigland@redhat.com>
CommitterDate: Fri Feb 13 15:49:43 2009 -0600
fenced: use quorum instead of votequorum
The "quorum" api is the more general one.
Signed-off-by: David Teigland <teigland@redhat.com>
---
fence/fenced/Makefile | 2 +-
fence/fenced/member_cman.c | 87 ++++++++++++++++++++++++--------------------
2 files changed, 48 insertions(+), 41 deletions(-)
diff --git a/fence/fenced/Makefile b/fence/fenced/Makefile
index a999993..a4dd789 100644
--- a/fence/fenced/Makefile
+++ b/fence/fenced/Makefile
@@ -25,7 +25,7 @@ CFLAGS += -I${incdir}
LDFLAGS += -L${ccslibdir} -L${logtlibdir} -lccs -llogthread
LDFLAGS += -L${fencelibdir} -lfence
-LDFLAGS += -L${corosynclibdir} -lcpg -lcfg -lvotequorum -lpthread
+LDFLAGS += -L${corosynclibdir} -lcpg -lcfg -lquorum -lpthread
LDFLAGS += -L${libdir}
${TARGET}: ${OBJS} ${LDDEPS}
diff --git a/fence/fenced/member_cman.c b/fence/fenced/member_cman.c
index 9e52429..176787a 100644
--- a/fence/fenced/member_cman.c
+++ b/fence/fenced/member_cman.c
@@ -2,11 +2,11 @@
#include "config.h"
#include <corosync/corotypes.h>
#include <corosync/cfg.h>
-#include <corosync/votequorum.h>
+#include <corosync/quorum.h>
-static corosync_cfg_handle_t ch;
-static votequorum_handle_t qh;
-static votequorum_node_t quorum_nodes[MAX_NODES];
+static corosync_cfg_handle_t ch;
+static quorum_handle_t qh;
+static uint32_t quorum_nodes[MAX_NODES];
static int quorum_node_count;
void kick_node_from_cluster(int nodeid)
@@ -22,13 +22,13 @@ 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;
}
@@ -38,7 +38,7 @@ int is_cluster_member(int nodeid)
int rv;
/* Note: in fence delay loop we aren't processing callbacks so won't
- have dispatched any votequorum callbacks */
+ have dispatched any quorum callbacks */
update_cluster();
rv = is_member(quorum_nodes, quorum_node_count, nodeid);
@@ -48,9 +48,9 @@ int is_cluster_member(int nodeid)
return rv;
}
-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)
{
int prev_quorate = cluster_quorate;
int i;
@@ -60,29 +60,24 @@ 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];
/* domain may have been waiting for quorum */
if (!prev_quorate && cluster_quorate)
process_fd_changes();
}
-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);
}
@@ -92,34 +87,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, rv;
+ 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;
- log_debug("our_nodeid %d", our_nodeid);
+ }
- 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;
+ }
quorum_node_count = 0;
memset(&quorum_nodes, 0, sizeof(quorum_nodes));
@@ -128,14 +122,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,
@@ -172,18 +166,31 @@ 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;
}