From: David Teigland <teigland@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] patch proposal for BZ#514662
Date: Fri, 25 Sep 2009 12:11:07 -0500 [thread overview]
Message-ID: <20090925171107.GF9544@redhat.com> (raw)
I'm not sure this ever made it to the list.
----- Forwarded message from edamato at redhat.com -----
Date: Mon, 3 Aug 2009 16:49:12 +0100
From: edamato@redhat.com
To: dct@redhat.com
Cc: cluster-devel at redhat.com,
"Pancrazio `Ezio' de Mauro" <pdemauro@redhat.com>
Subject: patch proposal for BZ#514662
Message-ID: <20090803154912.GR23767@civitate.fab.redhat.com>
Hi Dave,
As we discussed on #cluster, sending you this patch for BZ#514662. It implements readconfig and dumpconfig for fence_tool and fenced.
Thank you for the many corrections!!
I tested the last patch, and have:
[root at pe1950-1 fence]# ./fence_tool/fence_tool dumpconfig
post_fail_delay = 80
post_join_delay = 8
clean_start = 0
skip_undefined = 0
override_path = /var/run/cluster/fenced_override
[root at pe1950-1 fence]# ccs_tool update /etc/cluster/cluster.conf
Config file updated from version 679 to 680
Update complete.
[root at pe1950-1 fence]# ./fence_tool/fence_tool readconfig
[root at pe1950-1 fence]# ./fence_tool/fence_tool dumpconfig
post_fail_delay = 101
post_join_delay = 12
clean_start = 0
skip_undefined = 0
override_path = /var/run/cluster/fenced_override
[root at pe1950-1 fence]# ./fence_tool/fence_tool dumpconfig
post_fail_delay = 101
post_join_delay = 12
clean_start = 0
skip_undefined = 0
override_path = /var/run/cluster/fenced_override
caveats:
- fence_tool readconfig must be run on every node.
- fence_tool readconfig is not testing if the fence domain is performing recovery, and updates it nonetheless. This should not be a problem because delay is set from post_fail_delay internally during recovery and should not affect fenced while doing recovery, but good to document anyway.
Let me know if you would like to have any modifications.
cheers
Eduardo.
--
-----
Eduardo Damato Red Hat UK Ltd
Principal Technical Support Engineer 200 Fowler Avenue
Tel: +44 1252 362700 Farnborough Business Park
email: edamato at redhat.com Farnborough, Hampshire GU14 7JP
diff -up cman-2.0.98.DIFF/fence/fenced/main.c.DIFF cman-2.0.98.DIFF/fence/fenced/main.c
--- cman-2.0.98.DIFF/fence/fenced/main.c.DIFF 2009-07-31 21:21:36.000000000 +0100
+++ cman-2.0.98.DIFF/fence/fenced/main.c 2009-08-03 16:13:12.000000000 +0100
@@ -379,6 +379,72 @@ static int do_dump(int fd)
return 0;
}
+static int do_readconfig(int fd)
+{
+ char path[256], *str = NULL;
+ int error, cd, i = 0;
+
+ while ((cd = ccs_connect()) < 0) {
+ sleep(1);
+ if (++i > 9 && !(i % 10))
+ log_error("connect to ccs error %d, "
+ "check ccsd or cluster status", cd);
+ }
+
+ if (comline.post_join_delay_opt == FALSE) {
+ str = NULL;
+ memset(path, 0, 256);
+ sprintf(path, "/cluster/fence_daemon/@post_join_delay");
+
+ error = ccs_get(cd, path, &str);
+ if (!error)
+ comline.post_join_delay = atoi(str);
+ else
+ comline.post_join_delay = DEFAULT_POST_JOIN_DELAY;
+ if (str)
+ free(str);
+ }
+
+ if (comline.post_fail_delay_opt == FALSE) {
+ str = NULL;
+ memset(path, 0, 256);
+ sprintf(path, "/cluster/fence_daemon/@post_fail_delay");
+
+ error = ccs_get(cd, path, &str);
+ if (!error)
+ comline.post_fail_delay = atoi(str);
+ else
+ comline.post_fail_delay = DEFAULT_POST_FAIL_DELAY;
+ if (str)
+ free(str);
+ }
+
+ if (error) {
+ log_error("reconfigure: error reading ccs connector"
+ " %d, check ccsd or cluster status", cd);
+ return -1;
+ }
+
+ return 0;
+}
+
+static int do_dumpconfig(int fd)
+{
+ char buf[DUMP_SIZE];
+
+ memset(buf, 0, sizeof(buf));
+ sprintf(buf, "post_fail_delay = %d\n" "post_join_delay = %d\n"
+ "clean_start = %d\n" "skip_undefined = %d\n"
+ "override_path = %s\n",
+ comline.post_fail_delay, comline.post_join_delay,
+ comline.clean_start, comline.skip_undefined,
+ comline.override_path);
+
+ do_write(fd, buf, sizeof(buf));
+
+ return 0;
+}
+
static int client_process(int ci)
{
char buf[MAXLINE], *argv[MAXARGS], *cmd, *name, out[MAXLINE];
@@ -408,6 +474,10 @@ static int client_process(int ci)
rv = do_join(name);
else if (!strcmp(cmd, "leave"))
rv = do_leave(name);
+ else if (!strcmp(cmd, "readconfig"))
+ rv = do_readconfig(name);
+ else if (!strcmp(cmd, "dumpconfig"))
+ rv = do_dumpconfig(client[ci].fd);
else if (!strcmp(cmd, "dump")) {
do_dump(client[ci].fd);
close(client[ci].fd);
diff -up cman-2.0.98.DIFF/fence/fence_tool/fence_tool.c.DIFF cman-2.0.98.DIFF/fence/fence_tool/fence_tool.c
--- cman-2.0.98.DIFF/fence/fence_tool/fence_tool.c.DIFF 2009-07-31 19:54:15.000000000 +0100
+++ cman-2.0.98.DIFF/fence/fence_tool/fence_tool.c 2009-08-03 16:18:26.000000000 +0100
@@ -47,6 +47,8 @@
#define OP_LEAVE 2
#define OP_WAIT 3
#define OP_DUMP 4
+#define OP_READCONFIG 5
+#define OP_DUMPCONFIG 6
/* needs to match the same in cluster/group/daemon/gd_internal.h and
cluster/group/gfs_controld/lock_dlm.h and cluster/fence/fenced/fd.h */
@@ -432,11 +434,62 @@ static int do_dump(void)
return 0;
}
+static int do_readconfig(void)
+{
+ char buf[MAXLINE];
+ int fd, rv;
+
+ fd = fenced_connect();
+
+ memset(buf, 0, sizeof(buf));
+
+ sprintf(buf, "readconfig");
+
+ rv = do_write(fd, buf, sizeof(buf));
+ if (rv < 0)
+ die("can't communicate with fenced");
+
+ memset(buf, 0, sizeof(buf));
+ rv = do_read(fd, buf, sizeof(buf));
+ if (rv < 0)
+ printf("readconfig: %s\n", strerror(errno));
+
+ close(fd);
+ return 0;
+}
+
+static int do_dumpconfig(void)
+{
+ char inbuf[DUMP_SIZE];
+ char outbuf[MAXLINE];
+ int fd, rv;
+
+ fd = fenced_connect();
+
+ memset(inbuf, 0, sizeof(inbuf));
+ memset(outbuf, 0, sizeof(outbuf));
+
+ sprintf(outbuf, "dumpconfig");
+
+ rv = do_write(fd, outbuf, sizeof(outbuf));
+ if (rv < 0)
+ die("can't communicate with fenced");
+
+ rv = do_read(fd, inbuf, sizeof(inbuf));
+ if (rv < 0)
+ printf("dump config: %s\n", strerror(errno));
+
+ do_write(STDOUT_FILENO, inbuf, strlen(inbuf));
+
+ close(fd);
+ return 0;
+}
+
static void print_usage(void)
{
printf("Usage:\n");
printf("\n");
- printf("%s <join|leave|dump> [options]\n", prog_name);
+ printf("%s <join|leave|dump|dumpconfig|readconfig> [options]\n", prog_name);
printf("\n");
printf("Actions:\n");
printf(" join Join the default fence domain\n");
@@ -515,6 +568,10 @@ static void decode_arguments(int argc, c
operation = OP_LEAVE;
} else if (strcmp(argv[optind], "dump") == 0) {
operation = OP_DUMP;
+ } else if (strcmp(argv[optind], "dumpconfig") == 0) {
+ operation = OP_DUMPCONFIG;
+ } else if (strcmp(argv[optind], "readconfig") == 0) {
+ operation = OP_READCONFIG;
} else
die("unknown option %s\n", argv[optind]);
optind++;
@@ -537,6 +594,10 @@ int main(int argc, char *argv[])
return do_leave();
case OP_DUMP:
return do_dump();
+ case OP_READCONFIG:
+ return do_readconfig();
+ case OP_DUMPCONFIG:
+ return do_dumpconfig();
case OP_WAIT:
return -1;
}
diff -up cman-2.0.98.DIFF/fence/man/fence_tool.8.DIFF cman-2.0.98.DIFF/fence/man/fence_tool.8
--- cman-2.0.98.DIFF/fence/man/fence_tool.8.DIFF 2009-07-31 23:09:38.000000000 +0100
+++ cman-2.0.98.DIFF/fence/man/fence_tool.8 2009-08-03 16:12:35.000000000 +0100
@@ -13,12 +13,13 @@ fence_tool - A program to join and leave
.SH SYNOPSIS
.B
fence_tool
-<\fBjoin | leave | dump\fP>
+<\fBjoin | leave | dump | dumpconfig | readconfig\fP>
[\fIOPTION\fR]...
.SH DESCRIPTION
\fBfence_tool\fP is a program used to join or leave the default fence
-domain. It communicates with the fenced daemon. Before telling fenced
+domain, but also to dump and reread the configuration from CCS.
+It communicates with the fenced daemon. Before telling fenced
to join the domain, fence_tool waits for the cluster to have quorum,
making it easier to cancel the command if the cluster is inquorate.
----- End forwarded message -----
reply other threads:[~2009-09-25 17:11 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090925171107.GF9544@redhat.com \
--to=teigland@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.