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