[Cluster-devel] cluster/fence/fenced agent.c fd.h recover.c
rmccabe at sourceware.org
rmccabe at sourceware.org
Fri Oct 26 20:36:49 UTC 2007
CVSROOT: /cvs/cluster
Module name: cluster
Changes by: rmccabe at sourceware.org 2007-10-26 20:36:49
Modified files:
fence/fenced : agent.c fd.h recover.c
Log message:
patch from Marco Ceci to fix 354421
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fenced/agent.c.diff?cvsroot=cluster&r1=1.18&r2=1.19
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fenced/fd.h.diff?cvsroot=cluster&r1=1.26&r2=1.27
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fenced/recover.c.diff?cvsroot=cluster&r1=1.29&r2=1.30
--- cluster/fence/fenced/agent.c 2007/10/26 18:46:16 1.18
+++ cluster/fence/fenced/agent.c 2007/10/26 20:36:49 1.19
@@ -302,11 +302,23 @@
cman_finish(ch);
}
-int dispatch_fence_agent(int cd, char *victim)
+int dispatch_fence_agent(char *victim, int force)
{
char *method = NULL, *device = NULL;
char *victim_nodename = NULL;
- int num_methods, num_devices, m, d, error = -1;
+ int num_methods, num_devices, m, d, error = -1, cd;
+
+ if (force)
+ cd = ccs_force_connect(NULL, 0);
+ else {
+ while ((cd = ccs_connect()) < 0)
+ sleep(1);
+ }
+
+ if (cd < 0) {
+ syslog(LOG_ERR, "cannot connect to ccs %d\n", cd);
+ return -1;
+ }
if (ccs_lookup_nodename(cd, victim, &victim_nodename) == 0)
victim = victim_nodename;
@@ -316,8 +328,23 @@
for (m = 0; m < num_methods; m++) {
error = get_method(cd, victim, m, &method);
+
+ /* if the connection timed out while we were trying
+ * to fence, try to open the connection again
+ */
+ if (error == -EBADR) {
+ syslog(LOG_INFO, "ccs connection timed out, "
+ "retrying\n");
+
+ while ((cd = ccs_connect()) < 0)
+ sleep(1);
+
+ error = get_method(cd, victim, m, &method);
+
if (error)
continue;
+ } else if (error)
+ continue;
/* if num_devices is zero we should return an error */
error = -1;
@@ -348,6 +375,8 @@
break;
}
+ ccs_disconnect(cd);
+
return error;
}
--- cluster/fence/fenced/fd.h 2007/02/22 16:12:42 1.26
+++ cluster/fence/fenced/fd.h 2007/10/26 20:36:49 1.27
@@ -2,7 +2,7 @@
*******************************************************************************
**
** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
-** Copyright (C) 2004 Red Hat, Inc. All rights reserved.
+** Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
**
** This copyrighted material is made available to anyone wishing to use,
** modify, copy, or redistribute it subject to the terms and conditions
@@ -176,7 +176,7 @@
void do_recovery_done(fd_t *fd);
/* agent.c */
-int dispatch_fence_agent(int cd, char *victim);
+int dispatch_fence_agent(char *victim, int force);
/* group.c */
int setup_groupd(void);
--- cluster/fence/fenced/recover.c 2007/09/18 20:53:47 1.29
+++ cluster/fence/fenced/recover.c 2007/10/26 20:36:49 1.30
@@ -2,7 +2,7 @@
*******************************************************************************
**
** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
-** Copyright (C) 2004 Red Hat, Inc. All rights reserved.
+** Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
**
** This copyrighted material is made available to anyone wishing to use,
** modify, copy, or redistribute it subject to the terms and conditions
@@ -12,7 +12,6 @@
******************************************************************************/
#include "fd.h"
-#include "ccs.h"
#include <sys/time.h>
#include <sys/types.h>
#include <sys/select.h>
@@ -359,7 +358,7 @@
{
fd_node_t *node;
char *master_name;
- int master, error, cd;
+ int master, error;
int override = -1;
master = find_master_nodeid(fd, &master_name);
@@ -372,9 +371,6 @@
delay_fencing(fd, start_type);
- while ((cd = ccs_connect()) < 0)
- sleep(1);
-
while (!list_empty(&fd->victims)) {
node = list_entry(fd->victims.next, fd_node_t, list);
@@ -388,7 +384,7 @@
log_debug("fencing node %s", node->name);
syslog(LOG_INFO, "fencing node \"%s\"", node->name);
- error = dispatch_fence_agent(cd, node->name);
+ error = dispatch_fence_agent(node->name, 0);
syslog(LOG_INFO, "fence \"%s\" %s", node->name,
error ? "failed" : "success");
@@ -415,8 +411,6 @@
}
close_override(&override, comline.override_path);
}
-
- ccs_disconnect(cd);
}
static void add_victims(fd_t *fd, int start_type, int member_count,
More information about the Cluster-devel
mailing list