dlm: master - dlm_controld: use quorum instead of votequorum

David Teigland teigland@fedoraproject.org
Fri Feb 13 18:19:00 GMT 2009


Gitweb:        http://git.fedorahosted.org/git/dlm.git?p=dlm.git;a=commitdiff;h=c62232d499fa1e33c9289cc7591a74610bd8b033
Commit:        c62232d499fa1e33c9289cc7591a74610bd8b033
Parent:        5045786d61b87eae5d1c3a9fe2e23e00e2da36ac
Author:        David Teigland <teigland@redhat.com>
AuthorDate:    Fri Feb 13 12:16:03 2009 -0600
Committer:     David Teigland <teigland@redhat.com>
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 <teigland@redhat.com>
---
 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 <corosync/corotypes.h>
 #include <corosync/cfg.h>
-#include <corosync/votequorum.h>
+#include <corosync/quorum.h>
 #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;
 }



More information about the Cluster-cvs mailing list