cluster: RHEL510 - fence_xvm: Add a delay (-w) option

Ryan McCabe rmccabe at fedoraproject.org
Mon Apr 15 14:15:31 UTC 2013


Gitweb:        http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=8ebfc023495b1010e6802ab1be6fb11790f35494
Commit:        8ebfc023495b1010e6802ab1be6fb11790f35494
Parent:        adf106455d72219956030c7f821b0dd06381a9cb
Author:        Ryan McCabe <rmccabe at redhat.com>
AuthorDate:    Mon Apr 15 10:13:56 2013 -0400
Committer:     Ryan McCabe <rmccabe at redhat.com>
CommitterDate: Mon Apr 15 10:13:56 2013 -0400

fence_xvm: Add a delay (-w) option

Add a delay option to fence_xvm that causes it to sleep some specified
number of seconds before performing fencing operations.

Resolves: rhbz#854183

Signed-off-by: Ryan McCabe <rmccabe at redhat.com>
---
 fence/agents/xvm/fence_xvm.c |    5 ++++-
 fence/agents/xvm/options.c   |   21 ++++++++++++++++++++-
 fence/agents/xvm/options.h   |    1 +
 fence/man/fence_xvm.8        |    7 +++++++
 4 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/fence/agents/xvm/fence_xvm.c b/fence/agents/xvm/fence_xvm.c
index eb006fd..0cb78e5 100644
--- a/fence/agents/xvm/fence_xvm.c
+++ b/fence/agents/xvm/fence_xvm.c
@@ -317,7 +317,7 @@ int
 main(int argc, char **argv)
 {
 	fence_xvm_args_t args;
-	char *my_options = "di:a:p:r:C:c:k:H:uo:t:?hV";
+	char *my_options = "di:a:p:r:C:c:k:H:uo:t:?hVw:";
 
 	args_init(&args);
 	if (argc == 1) {
@@ -372,5 +372,8 @@ main(int argc, char **argv)
 		return 1;
 	}
 
+	if (args.delay > 0)
+		sleep(args.delay);
+
 	return fence_xen_domain(&args);
 }
diff --git a/fence/agents/xvm/options.c b/fence/agents/xvm/options.c
index c77dee0..107b29a 100644
--- a/fence/agents/xvm/options.c
+++ b/fence/agents/xvm/options.c
@@ -251,6 +251,20 @@ assign_help(fence_xvm_args_t *args, struct arg_info *arg, char *value)
 
 
 static inline void
+assign_delay(fence_xvm_args_t *args, struct arg_info *arg, char *value)
+{
+	if (!value)
+		return;
+
+	args->delay = atoi(value);
+	if (args->timeout <= 0) {
+		printf("Invalid delay: '%s'\n", value);
+		args->flags |= F_ERR;
+	}
+}
+
+
+static inline void
 assign_version(fence_xvm_args_t *args, struct arg_info *arg, char *value)
 {
 	args->flags |= F_VERSION;
@@ -369,7 +383,11 @@ static struct arg_info _arg_info[] = {
 	{ 'U', "-U", "uri",
 	  "URI for Hypervisor (default: auto detect)",
 	  assign_uri },
-	  
+
+	{ 'w', "-w <delay>", "delay",
+	  "Fencing delay (in seconds; default=0)",
+	  assign_delay },
+
 	{ 'V', "-V", NULL,
  	  "Display version and exit", 
 	  assign_version },
@@ -433,6 +451,7 @@ args_init(fence_xvm_args_t *args)
 	args->retr_time = 20;
 	args->flags = 0;
 	args->debug = 0;
+	args->delay = 0;
 }
 
 
diff --git a/fence/agents/xvm/options.h b/fence/agents/xvm/options.h
index 7687acc..9115b09 100644
--- a/fence/agents/xvm/options.h
+++ b/fence/agents/xvm/options.h
@@ -44,6 +44,7 @@ typedef struct {
 	unsigned int ifindex;
 	int family;
 	int timeout;
+	int delay;
 	int retr_time;
 	arg_flags_t flags;
 	int debug;
diff --git a/fence/man/fence_xvm.8 b/fence/man/fence_xvm.8
index 55c7915..209761e 100644
--- a/fence/man/fence_xvm.8
+++ b/fence/man/fence_xvm.8
@@ -87,6 +87,10 @@ failure!).
 This specifies the amount of time, in seconds, to wait before a response to
 the multicast request before giving up (default=30).
 .TP
+\fB-w\fP \fIdelay\fP
+. 
+Fencing delay (in seconds). The fence agent will wait the specified number of seconds before attempting a fencing operation. (Default Value: 0)
+.TP
 \fB-?\fP
 Print out a help message describing available options, then exit.
 .TP
@@ -137,6 +141,9 @@ Same as the -o option.
 \fItimeout = < param >\fR
 Same as the -t option.
 .TP
+\fIdelay = < param >\fR
+Same as the -w option.
+.TP
 \fIdomain = < param >\fR
 Same as the -H option.
 


More information about the cluster-commits mailing list