master - fenced: use group_mode detection
David Teigland
teigland@fedoraproject.org
Wed Jul 30 20:33:00 GMT 2008
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=16ea71248f91435c5489f3c1c2d9375a9024c92e
Commit: 16ea71248f91435c5489f3c1c2d9375a9024c92e
Parent: f090526867f97d09f3813b7e0e1ca09ed650d71d
Author: David Teigland <teigland@redhat.com>
AuthorDate: Wed Jul 30 14:04:13 2008 -0500
Committer: David Teigland <teigland@redhat.com>
CommitterDate: Wed Jul 30 14:04:13 2008 -0500
fenced: use group_mode detection
The new default is to use group mode detection from groupd.
This is -g2 (command line) or <group groupd_compat="2"> (cluster.conf).
Signed-off-by: David Teigland <teigland@redhat.com>
---
fence/fenced/config.h | 2 +-
fence/fenced/fd.h | 1 +
fence/fenced/group.c | 28 ++++++++++++++++++++++++++++
fence/fenced/main.c | 19 +++++++++----------
group/daemon/main.c | 20 +++++++++++++-------
group/lib/libgroup.c | 1 -
6 files changed, 52 insertions(+), 19 deletions(-)
diff --git a/fence/fenced/config.h b/fence/fenced/config.h
index 4ee9522..eea8cb6 100644
--- a/fence/fenced/config.h
+++ b/fence/fenced/config.h
@@ -1,7 +1,7 @@
#ifndef __CONFIG_DOT_H__
#define __CONFIG_DOT_H__
-#define DEFAULT_GROUPD_COMPAT 1
+#define DEFAULT_GROUPD_COMPAT 2
#define DEFAULT_DEBUG_LOGSYS 0
#define DEFAULT_CLEAN_START 0
#define DEFAULT_POST_JOIN_DELAY 6
diff --git a/fence/fenced/fd.h b/fence/fenced/fd.h
index c6c6118..2f54143 100644
--- a/fence/fenced/fd.h
+++ b/fence/fenced/fd.h
@@ -227,6 +227,7 @@ int set_node_info_group(struct fd *fd, int nodeid, struct fenced_node *node);
int set_domain_info_group(struct fd *fd, struct fenced_domain *domain);
int set_domain_nodes_group(struct fd *fd, int option, int *node_count,
struct fenced_node **nodes);
+void set_group_mode(void);
/* main.c */
diff --git a/fence/fenced/group.c b/fence/fenced/group.c
index 981a94b..3217518 100644
--- a/fence/fenced/group.c
+++ b/fence/fenced/group.c
@@ -441,3 +441,31 @@ int set_domain_nodes_group(struct fd *fd, int option, int *node_count,
return 0;
}
+void set_group_mode(void)
+{
+ int i = 0, rv, version;
+
+ while (1) {
+ rv = group_get_version(&version);
+ if (rv) {
+ log_error("group_get_version error %d", rv);
+ break;
+ } else if (version == GROUP_LIBGROUP) {
+ group_mode = GROUP_LIBGROUP;
+ break;
+ } else if (version == GROUP_LIBCPG) {
+ group_mode = GROUP_LIBCPG;
+ break;
+ } else if (version != -EAGAIN) {
+ log_error("group_get_version result %d", version);
+ break;
+ }
+
+ if (i++ > 10) {
+ log_error("no version from groupd");
+ break;
+ }
+ sleep(1);
+ }
+}
+
diff --git a/fence/fenced/main.c b/fence/fenced/main.c
index d3737eb..3c88197 100644
--- a/fence/fenced/main.c
+++ b/fence/fenced/main.c
@@ -635,12 +635,10 @@ static void loop(void)
client_add(rv, process_groupd, cluster_dead);
group_mode = GROUP_LIBGROUP;
-
- if (cfgd_groupd_compat == 2) {
- /* set_group_mode(); */
- group_mode = GROUP_LIBGROUP;
- }
+ if (cfgd_groupd_compat == 2)
+ set_group_mode();
}
+ log_debug("group_mode %d compat %d", group_mode, cfgd_groupd_compat);
if (group_mode == GROUP_LIBCPG) {
/*
@@ -746,11 +744,12 @@ static void print_usage(void)
printf("\n");
printf(" -D Enable debugging code and don't fork\n");
printf(" -L <num> Enable (1) or disable (0) debugging to logsys (default %d)\n", DEFAULT_DEBUG_LOGSYS);
- printf(" -g <num> groupd compatibility, 0 off, 1 on\n");
- printf(" on: use libgroup, compat with cluster2/stable2/rhel5\n");
- printf(" off: use libcpg, no backward compatability\n");
- printf(" Default is %d\n", DEFAULT_GROUPD_COMPAT);
- printf(" -c All nodes are in a clean state to start\n");
+ printf(" -g <num> groupd compatibility mode, 0 off, 1 on, 2 detect (default %d)\n", DEFAULT_GROUPD_COMPAT);
+ printf(" 0: use libcpg, no backward compat, best performance\n");
+ printf(" 1: use libgroup for compat with cluster2/rhel5\n");
+ printf(" 2: use groupd to detect old, or mode 1, nodes that\n"
+ " require compat, use libcpg if none found\n");
+ printf(" -c All nodes are in a clean state to start\n");
printf(" -j <secs> Post-join fencing delay (default %d)\n", DEFAULT_POST_JOIN_DELAY);
printf(" -f <secs> Post-fail fencing delay (default %d)\n", DEFAULT_POST_FAIL_DELAY);
printf(" -R <secs> Override time (default %d)\n", DEFAULT_OVERRIDE_TIME);
diff --git a/group/daemon/main.c b/group/daemon/main.c
index 8059908..9d00c24 100644
--- a/group/daemon/main.c
+++ b/group/daemon/main.c
@@ -627,7 +627,10 @@ static int do_get_version(int ci)
int mode;
int rv;
- mode = group_mode;
+ if (group_mode == GROUP_PENDING)
+ mode = -EAGAIN;
+ else
+ mode = group_mode;
rv = do_write(client[ci].fd, &mode, sizeof(mode));
if (rv < 0)
@@ -974,13 +977,16 @@ static void print_usage(void)
printf(" -L <num> Enable (1) or disable (0) debugging to logsys (default %d)\n", DEFAULT_DEBUG_LOGSYS);
printf(" -g <num> group compatibility mode, 0 off, 1 on, 2 detect\n");
printf(" 0: use libcpg, no backward compat, best performance\n");
- printf(" 1: use libgroup for compat with cluster2/stable2/rhel5\n");
- printf(" 2: detect old, or mode 0, nodes that require compat, use libcpg if none found\n");
+ printf(" 1: use libgroup for compat with cluster2/rhel5\n");
+ printf(" 2: detect old, or mode 1, nodes that require compat,\n"
+ " use libcpg if none found\n");
printf(" Default is %d\n", DEFAULT_GROUPD_COMPAT);
- printf(" -w <secs> seconds to wait for a node's version message before assuming an old version requiring compat mode\n");
- printf(" Default is %d", DEFAULT_GROUPD_WAIT);
- printf(" -d <secs> seconds to delay the mode selection to give time for an old version to join and force compat mode\n");
- printf(" Default is %d", DEFAULT_GROUPD_MODE_DELAY);
+ printf(" -w <secs> seconds to wait for a node's version message before\n"
+ " assuming an old version requiring compat mode\n");
+ printf(" Default is %d\n", DEFAULT_GROUPD_WAIT);
+ printf(" -d <secs> seconds to delay the mode selection to give time\n"
+ " for an old version to join and force compat mode\n");
+ printf(" Default is %d\n", DEFAULT_GROUPD_MODE_DELAY);
printf(" -h Print this help, then exit\n");
printf(" -V Print program version information, then exit\n");
}
diff --git a/group/lib/libgroup.c b/group/lib/libgroup.c
index 82fe3fb..c86ac25 100644
--- a/group/lib/libgroup.c
+++ b/group/lib/libgroup.c
@@ -500,7 +500,6 @@ int group_get_group(int level, const char *name, group_data_t *data)
int group_get_version(int *version)
{
char buf[GROUPD_MSGLEN];
- char data_buf[sizeof(int)];
int fd, rv;
fd = connect_groupd();
More information about the Cluster-cvs
mailing list