From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3364 invoked by alias); 26 Feb 2009 18:08:23 -0000 Received: (qmail 3357 invoked by alias); 26 Feb 2009 18:08:23 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43,SPF_HELO_PASS X-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bastion.fedora.phx.redhat.com Subject: fence: master - fence_node: unfence local node by default To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: fence.git X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 54eccd946068e48a4c1636a938e94fa4b17e9f38 X-Git-Newrev: 9abd4d6acd89b04acb06f342f5018ff77f19ef2a From: David Teigland Message-Id: <20090226180803.5B229120265@lists.fedorahosted.org> Date: Thu, 26 Feb 2009 18:08: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: 2009-q1/txt/msg00579.txt.bz2 Gitweb: http://git.fedorahosted.org/git/fence.git?p=fence.git;a=commitdiff;h=9abd4d6acd89b04acb06f342f5018ff77f19ef2a Commit: 9abd4d6acd89b04acb06f342f5018ff77f19ef2a Parent: 54eccd946068e48a4c1636a938e94fa4b17e9f38 Author: David Teigland AuthorDate: Thu Feb 26 12:00:08 2009 -0600 Committer: David Teigland CommitterDate: Thu Feb 26 12:05:29 2009 -0600 fence_node: unfence local node by default and wait for cman to be active before using it for getting the local node name (for unfence default), and ccs queries (in libfence). Signed-off-by: David Teigland --- fence/fence_node/Makefile | 4 +- fence/fence_node/fence_node.c | 55 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/fence/fence_node/Makefile b/fence/fence_node/Makefile index 0ce0615..06a8e54 100644 --- a/fence/fence_node/Makefile +++ b/fence/fence_node/Makefile @@ -14,11 +14,11 @@ OBJS= fence_node.o CFLAGS += -D_FILE_OFFSET_BITS=64 -CFLAGS += -I${ccsincdir} -I${fenceincdir} -I${logtincdir} +CFLAGS += -I${ccsincdir} -I${cmanincdir} -I${fenceincdir} -I${logtincdir} CFLAGS += -I$(S)/../libfenced CFLAGS += -I${incdir} -LDFLAGS += -L${ccslibdir} -L${fencelibdir} -lccs -lfence +LDFLAGS += -L${ccslibdir} -L{cmanlibdir} -L${fencelibdir} -lccs -lcman -lfence LDFLAGS += -L${logtlibdir} -llogthread LDFLAGS += -L../libfenced -lfenced LDFLAGS += -L${libdir} diff --git a/fence/fence_node/fence_node.c b/fence/fence_node/fence_node.c index 6cb15e7..1e3c293 100644 --- a/fence/fence_node/fence_node.c +++ b/fence/fence_node/fence_node.c @@ -4,12 +4,14 @@ #include #include #include +#include #include "libfence.h" #include "libfenced.h" #include "copyright.cf" static char *prog_name; +static char our_name[CMAN_MAX_NODENAME_LEN+1]; static int verbose; static int unfence; @@ -37,13 +39,47 @@ static void print_usage(void) printf("\n"); printf("Options:\n"); printf("\n"); - printf(" -U Unfence the node\n"); + printf(" -U Unfence the node, default local node name\n"); printf(" -v Show fence agent results, -vv for agent args\n"); printf(" -h Print this help, then exit\n"); printf(" -V Print program version information, then exit\n"); printf("\n"); } +static int setup_cman(void) +{ + cman_handle_t ch; + cman_node_t node; + int active = 0; + int rv; + + ch = cman_init(NULL); + if (!ch) + return -1; + + retry_active: + rv = cman_is_active(ch); + if (!rv) { + if (active++ < 2) { + sleep(1); + goto retry_active; + } + cman_finish(ch); + return -1; + } + + rv = cman_get_node(ch, CMAN_NODEID_US, &node); + if (rv < 0) { + cman_finish(ch); + return -1; + } + + memset(our_name, 0, sizeof(our_name)); + strncpy(our_name, node.cn_name, CMAN_MAX_NODENAME_LEN); + cman_finish(ch); + return 0; +} + static char *fe_str(int r) { switch (r) { @@ -74,7 +110,7 @@ static char *fe_str(int r) int main(int argc, char *argv[]) { - char *victim = NULL, *p; + char *victim = NULL; int cont = 1, optchar, error, rv, i, c; prog_name = argv[0]; @@ -128,9 +164,16 @@ int main(int argc, char *argv[]) optind++; } - if (!victim) + if (!victim && !unfence) die("no node name specified"); + error = setup_cman(); + if (error) + die("cannot connect to cman"); + + if (!victim && unfence) + victim = our_name; + memset(&log, 0, sizeof(log)); log_count = 0; @@ -139,9 +182,6 @@ int main(int argc, char *argv[]) else error = fence_node(victim, log, FL_SIZE, &log_count); - logt_init("fence_node", LOG_MODE_OUTPUT_SYSLOG, SYSLOGFACILITY, - SYSLOGLEVEL, 0, NULL); - if (!verbose) goto skip; @@ -167,6 +207,9 @@ int main(int argc, char *argv[]) } skip: + logt_init("fence_node", LOG_MODE_OUTPUT_SYSLOG, SYSLOGFACILITY, + SYSLOGLEVEL, 0, NULL); + if (error) { fprintf(stderr, "%s %s failed\n", action, victim); logt_print(LOG_ERR, "%s %s failed\n", action, victim);