From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21272 invoked by alias); 30 Jul 2008 20:33:47 -0000 Received: (qmail 21231 invoked by alias); 30 Jul 2008 20:33:47 -0000 X-Spam-Status: No, hits=1.3 required=5.0 tests=AWL,BAYES_20,KAM_MX,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-01-01) on bastion.fedora.phx.redhat.com X-Spam-Level: Subject: master - gfs_controld: use group_mode detection To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: cluster.git X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: b991d064c1866f31c2bf0ae3f1558cf4806c12b3 X-Git-Newrev: 08028d26e6522bcf1c07adc82634fdc65ddf78a3 From: David Teigland Message-Id: <20080730203257.313B812001F@lists.fedorahosted.org> Date: Wed, 30 Jul 2008 21:00:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2008-q3/txt/msg00178.txt.bz2 Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=08028d26e6522bcf1c07adc82634fdc65ddf78a3 Commit: 08028d26e6522bcf1c07adc82634fdc65ddf78a3 Parent: b991d064c1866f31c2bf0ae3f1558cf4806c12b3 Author: David Teigland AuthorDate: Wed Jul 30 14:35:32 2008 -0500 Committer: David Teigland CommitterDate: Wed Jul 30 14:35:32 2008 -0500 gfs_controld: use group_mode detection The new default is to use group mode detection from groupd. This is -g2 (command line) or (cluster.conf). Signed-off-by: David Teigland --- group/gfs_controld/config.h | 2 +- group/gfs_controld/gfs_daemon.h | 7 +++++++ group/gfs_controld/group.c | 28 ++++++++++++++++++++++++++++ group/gfs_controld/main.c | 21 +++++++++------------ 4 files changed, 45 insertions(+), 13 deletions(-) diff --git a/group/gfs_controld/config.h b/group/gfs_controld/config.h index c1b619c..7ab2ad1 100644 --- a/group/gfs_controld/config.h +++ b/group/gfs_controld/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_ENABLE_WITHDRAW 1 #define DEFAULT_ENABLE_PLOCK 1 diff --git a/group/gfs_controld/gfs_daemon.h b/group/gfs_controld/gfs_daemon.h index 3c6c0df..e16aeca 100644 --- a/group/gfs_controld/gfs_daemon.h +++ b/group/gfs_controld/gfs_daemon.h @@ -57,6 +57,11 @@ #define MAXLINE 256 +/* group_mode */ + +#define GROUP_LIBGROUP 2 +#define GROUP_LIBCPG 3 + extern int daemon_debug_opt; extern int daemon_quit; extern int poll_dlm; @@ -76,6 +81,7 @@ extern int plock_dump_len; extern int dmsetup_wait; extern cpg_handle_t libcpg_handle; extern int libcpg_flow_control_on; +extern int group_mode; void daemon_dump_save(void); @@ -256,6 +262,7 @@ int set_node_info_group(struct mountgroup *mg, int nodeid, int set_mountgroups_group(int *count, struct gfsc_mountgroup **mgs_out); int set_mountgroup_nodes_group(struct mountgroup *mg, int option, int *node_count, struct gfsc_node **nodes_out); +void set_group_mode(void); /* main.c */ int do_read(int fd, void *buf, size_t count); diff --git a/group/gfs_controld/group.c b/group/gfs_controld/group.c index 72e142a..ca2e376 100644 --- a/group/gfs_controld/group.c +++ b/group/gfs_controld/group.c @@ -202,3 +202,31 @@ int set_mountgroup_nodes_group(struct mountgroup *mg, int option, int *node_coun 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/group/gfs_controld/main.c b/group/gfs_controld/main.c index 145d8f6..00e227d 100644 --- a/group/gfs_controld/main.c +++ b/group/gfs_controld/main.c @@ -7,14 +7,11 @@ #define LOCKFILE_NAME "/var/run/gfs_controld.pid" #define CLIENT_NALLOC 32 -#define GROUP_LIBGROUP 2 -#define GROUP_LIBCPG 3 static int client_maxi; static int client_size; static struct client *client; static struct pollfd *pollfd; -static int group_mode; static pthread_t query_thread; static pthread_mutex_t query_mutex; @@ -1056,13 +1053,10 @@ static void loop(void) client_add(rv, process_groupd, cluster_dead); group_mode = GROUP_LIBGROUP; - - if (cfgd_groupd_compat == 2) { - /* set_group_mode(); */ - /* might set group_mode to GROUP_LIBCPG */ - 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) { @@ -1224,9 +1218,11 @@ static void print_usage(void) printf("\n"); printf(" -D Enable debugging code and don't fork\n"); printf(" -L Enable (1) or disable (0) debugging to logsys (default %d)\n", DEFAULT_DEBUG_LOGSYS); - printf(" -g 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(" -g groupd 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/rhel5\n"); + printf(" 2: use groupd to detect old, or mode 1, nodes that\n" + " require compat, use libcpg if none found\n"); printf(" Default is %d\n", DEFAULT_GROUPD_COMPAT); printf(" -w Enable (1) or disable (0) withdraw\n"); printf(" Default is %d\n", DEFAULT_ENABLE_WITHDRAW); @@ -1440,4 +1436,5 @@ int plock_dump_len; int dmsetup_wait; cpg_handle_t libcpg_handle; int libcpg_flow_control_on; +int group_mode;