gfs2-utils: master - gfs_controld: replace cman with cfg

David Teigland teigland@fedoraproject.org
Fri Feb 13 17:52:00 GMT 2009


Gitweb:        http://git.fedorahosted.org/git/gfs2-utils.git?p=gfs2-utils.git;a=commitdiff;h=8398a4e351a3b4966afa06d241ab15ec376fa58e
Commit:        8398a4e351a3b4966afa06d241ab15ec376fa58e
Parent:        84eafcf2d6646ddabb55dd21877d55619e90f037
Author:        David Teigland <teigland@redhat.com>
AuthorDate:    Fri Feb 13 11:48:50 2009 -0600
Committer:     David Teigland <teigland@redhat.com>
CommitterDate: Fri Feb 13 11:49:59 2009 -0600

gfs_controld: replace cman with cfg

libcman calls have been replaced with corosync libcfg calls

Signed-off-by: David Teigland <teigland@redhat.com>
---
 group/gfs_controld/Makefile      |    6 +-
 group/gfs_controld/config.c      |    3 +
 group/gfs_controld/gfs_daemon.h  |    9 +--
 group/gfs_controld/main.c        |    9 +--
 group/gfs_controld/member_cman.c |  140 +++++++++++++++----------------------
 5 files changed, 71 insertions(+), 96 deletions(-)

diff --git a/group/gfs_controld/Makefile b/group/gfs_controld/Makefile
index 0bfe9d5..7f9fa01 100644
--- a/group/gfs_controld/Makefile
+++ b/group/gfs_controld/Makefile
@@ -18,17 +18,17 @@ OBJS= 	main.o \
 	util.o \
 	logging.o
 
-CFLAGS += -I${ccsincdir} -I${cmanincdir} -I${logtincdir} -I${dlmcontrolincdir}
+CFLAGS += -I${ccsincdir} -I${logtincdir} -I${dlmcontrolincdir}
 CFLAGS += -I${corosyncincdir} -I${openaisincdir} -I${fencedincdir}
 CFLAGS += -I${KERNEL_SRC}/include/
 CFLAGS += -I$(S)/../libgfscontrol 
 CFLAGS += -I$(S)/../include/
 CFLAGS += -I${incdir}
 
-LDFLAGS += -L${ccslibdir} -lccs -L${cmanlibdir} -lcman
+LDFLAGS += -L${ccslibdir} -lccs
 LDFLAGS += -L${dlmcontrollibdir} -ldlmcontrol
 LDFLAGS += -L${logtlibdir} -llogthread
-LDFLAGS += -L${corosynclibdir} -lcpg -lpthread
+LDFLAGS += -L${corosynclibdir} -lcpg -lcfg -lpthread
 LDFLAGS += -L${openaislibdir} -lSaCkpt
 LDFLAGS += -L${fencedlibdir} -lfenced
 LDFLAGS += -L${libdir}
diff --git a/group/gfs_controld/config.c b/group/gfs_controld/config.c
index 896e063..aafd01c 100644
--- a/group/gfs_controld/config.c
+++ b/group/gfs_controld/config.c
@@ -143,6 +143,9 @@ int setup_ccs(void)
 	if (!optd_enable_withdraw)
 		read_ccs_int(ENABLE_WITHDRAW_PATH, &cfgd_enable_withdraw);
 
+	read_ccs_name("/cluster/@name", clustername);
+	log_debug("cluster name \"%s\"", clustername);
+
 	return 0;
 }
 
diff --git a/group/gfs_controld/gfs_daemon.h b/group/gfs_controld/gfs_daemon.h
index ec9c0c6..913325c 100644
--- a/group/gfs_controld/gfs_daemon.h
+++ b/group/gfs_controld/gfs_daemon.h
@@ -62,9 +62,8 @@ extern int daemon_quit;
 extern int cluster_down;
 extern int poll_dlm;
 extern struct list_head mountgroups;
-extern int cman_quorate;
 extern int our_nodeid;
-extern char *clustername;
+extern char clustername[1024]; /* actual limit is sure to be smaller */
 extern char daemon_debug_buf[256];
 extern char dump_buf[GFSC_DUMP_SIZE];
 extern int dump_point;
@@ -207,9 +206,9 @@ void process_connection(int ci);
 void cluster_dead(int ci);
 
 /* member_cman.c */
-int setup_cman(void);
-void close_cman(void);
-void process_cman(int ci);
+int setup_cluster_cfg(void);
+void close_cluster_cfg(void);
+void process_cluster_cfg(int ci);
 void kick_node_from_cluster(int nodeid);
 
 /* util.c */
diff --git a/group/gfs_controld/main.c b/group/gfs_controld/main.c
index bf481af..0984c40 100644
--- a/group/gfs_controld/main.c
+++ b/group/gfs_controld/main.c
@@ -1064,10 +1064,10 @@ static void loop(void)
 		goto out;
 	client_add(rv, process_listener, NULL);
 
-	rv = setup_cman();
+	rv = setup_cluster_cfg();
 	if (rv < 0)
 		goto out;
-	client_add(rv, process_cman, cluster_dead);
+	client_add(rv, process_cluster_cfg, cluster_dead);
 
 	rv = setup_ccs();
 	if (rv < 0)
@@ -1155,7 +1155,7 @@ static void loop(void)
 	close_cpg();
 	close_logging();
 	close_ccs();
-	close_cman();
+	close_cluster_cfg();
 
 	if (!list_empty(&mountgroups))
 		log_error("mountgroups abandoned");
@@ -1356,9 +1356,8 @@ int daemon_quit;
 int cluster_down;
 int poll_dlm;
 struct list_head mountgroups;
-int cman_quorate;
 int our_nodeid;
-char *clustername;
+char clustername[1024];
 char daemon_debug_buf[256];
 char dump_buf[GFSC_DUMP_SIZE];
 int dump_point;
diff --git a/group/gfs_controld/member_cman.c b/group/gfs_controld/member_cman.c
index 2bd72d0..384fab0 100644
--- a/group/gfs_controld/member_cman.c
+++ b/group/gfs_controld/member_cman.c
@@ -1,121 +1,95 @@
 #include "gfs_daemon.h"
 #include "config.h"
-#include <libcman.h>
+#include <corosync/corotypes.h>
+#include <corosync/cfg.h>
 
-static cman_handle_t ch;
-static cman_handle_t ch_admin;
-static cman_cluster_t cluster;
+static corosync_cfg_handle_t ch;
 
 void kick_node_from_cluster(int nodeid)
 {
 	if (!nodeid) {
-		log_error("telling cman to shut down cluster locally");
-		cman_shutdown(ch_admin, CMAN_SHUTDOWN_ANYWAY);
+		log_error("telling corosync to shut down cluster locally");
+		corosync_cfg_try_shutdown(ch,
+				COROSYNC_CFG_SHUTDOWN_FLAG_IMMEDIATE);
 	} else {
-		log_error("telling cman to remove nodeid %d from cluster",
+		log_error("telling corosync to remove nodeid %d from cluster",
 			  nodeid);
-		cman_kill_node(ch_admin, nodeid);
+		corosync_cfg_kill_node(ch, nodeid, "gfs_controld");
 	}
 }
 
-static void cman_callback(cman_handle_t h, void *private, int reason, int arg)
+static void shutdown_callback(corosync_cfg_handle_t h,
+			      corosync_cfg_shutdown_flags_t flags)
 {
-	switch (reason) {
-	case CMAN_REASON_TRY_SHUTDOWN:
+	if (flags & COROSYNC_CFG_SHUTDOWN_FLAG_REQUEST) {
 		if (list_empty(&mountgroups))
-			cman_replyto_shutdown(ch, 1);
+			corosync_cfg_replyto_shutdown(ch,
+					COROSYNC_CFG_SHUTDOWN_FLAG_YES);
 		else {
-			log_debug("no to cman shutdown");
-			cman_replyto_shutdown(ch, 0);
+			log_debug("no to corosync shutdown");
+			corosync_cfg_replyto_shutdown(ch,
+					COROSYNC_CFG_SHUTDOWN_FLAG_NO);
 		}
-		break;
-	case CMAN_REASON_CONFIG_UPDATE:
-		setup_logging();
-		setup_ccs();
-		break;
 	}
 }
 
-void process_cman(int ci)
+static corosync_cfg_callbacks_t cfg_callbacks =
 {
-	int rv;
+	.corosync_cfg_shutdown_callback = shutdown_callback,
+	.corosync_cfg_state_track_callback = NULL,
+};
 
-	rv = cman_dispatch(ch, CMAN_DISPATCH_ALL);
-	if (rv == -1 && errno == EHOSTDOWN)
+void process_cluster_cfg(int ci)
+{
+	cs_error_t err;
+
+	err = corosync_cfg_dispatch(ch, CS_DISPATCH_ALL);
+	if (err != CS_OK)
 		cluster_dead(0);
 }
 
-int setup_cman(void)
+int setup_cluster_cfg(void)
 {
-	cman_node_t node;
-	int rv, fd;
-	int init = 0, active = 0;
+	cs_error_t err;
+	unsigned int nodeid;
+	int fd;
 
- retry_init:
-	ch_admin = cman_admin_init(NULL);
-	if (!ch_admin) {
-		if (init++ < 2) {
-			sleep(1);
-			goto retry_init;
-		}
-		log_error("cman_admin_init error %d", errno);
-		return -ENOTCONN;
+	err = corosync_cfg_initialize(&ch, &cfg_callbacks);
+	if (err != CS_OK) {
+		log_error("corosync cfg init error %d", err);
+		return -1;
 	}
 
-	ch = cman_init(NULL);
-	if (!ch) {
-		log_error("cman_init error %d", errno);
-		return -ENOTCONN;
-	}
-
- retry_active:
-	rv = cman_is_active(ch);
-	if (!rv) {
-		if (active++ < 2) {
-			sleep(1);
-			goto retry_active;
-		}
-		log_error("cman_is_active error %d", errno);
-		cman_finish(ch);
-		return -ENOTCONN;
+	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;
 	}
 
-	rv = cman_start_notification(ch, cman_callback);
-	if (rv < 0) {
-		log_error("cman_start_notification error %d %d", rv, errno);
-		cman_finish(ch);
-		return rv;
+	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);
 
-	fd = cman_get_fd(ch);
-
-	/* FIXME: wait here for us to be a member of the cluster */
-	memset(&cluster, 0, sizeof(cluster));
-	rv = cman_get_cluster(ch, &cluster);
-	if (rv < 0) {
-		log_error("cman_get_cluster error %d %d", rv, errno);
-		cman_stop_notification(ch);
-		cman_finish(ch);
-		return rv;
-	}
-	clustername = cluster.ci_name;
-
-	memset(&node, 0, sizeof(node));
-	rv = cman_get_node(ch, CMAN_NODEID_US, &node);
-	if (rv < 0) {
-		log_error("cman_get_node error %d %d", rv, errno);
-		cman_stop_notification(ch);
-		cman_finish(ch);
-		fd = rv;
-		goto out;
-	}
-	our_nodeid = node.cn_nodeid;
- out:
 	return fd;
 }
 
-void close_cman(void)
+void close_cluster_cfg(void)
 {
-	cman_finish(ch);
+	corosync_cfg_finalize(ch);
 }
 
+/* what's the replacement for this? */
+#if 0
+	case CMAN_REASON_CONFIG_UPDATE:
+		setup_logging();
+		setup_ccs();
+		break;
+	}
+#endif
+



More information about the Cluster-cvs mailing list