cluster: RHEL55 - groupd: handle partition merges

David Teigland teigland at fedoraproject.org
Tue Dec 15 20:20:11 UTC 2009


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=23d5cbe5dfcf20040814a09aafa33faf9f6f66e9
Commit:        23d5cbe5dfcf20040814a09aafa33faf9f6f66e9
Parent:        3234bbd17557cf9cb86d648bb2ad3d43f4c003b7
Author:        David Teigland <teigland at redhat.com>
AuthorDate:    Tue Dec 8 15:58:02 2009 -0600
Committer:     David Teigland <teigland at redhat.com>
CommitterDate: Tue Dec 15 15:15:42 2009 -0600

groupd: handle partition merges

bz 546082

The cman disallowed features means cman does not report
nodes that rejoin and then subsequently leave of fail.
But, the cpg api's do show these disallowed nodes rejoin
and then fail again.

The groupd recovery tries to match up the cpg and cman
node failures, which doesn't work when cman won't report
a disallowed node joining/failing.  To fix, just skip
waiting for the cman nodedown event if the node isn't a
member.

Signed-off-by: David Teigland <teigland at redhat.com>
---
 group/daemon/app.c         |    6 ++++++
 group/daemon/cman.c        |    2 +-
 group/daemon/gd_internal.h |    1 +
 3 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/group/daemon/app.c b/group/daemon/app.c
index 03952df..55ba6fd 100644
--- a/group/daemon/app.c
+++ b/group/daemon/app.c
@@ -307,6 +307,12 @@ struct recovery_set *add_recovery_set_cpg(int nodeid, int procdown)
 		}
 	}
 
+	if (!rs->cman_update && !is_cman_member(nodeid)) {
+		log_debug("add_recovery_set_cpg nodeid %d set cman_update",
+			   nodeid);
+		rs->cman_update = 1;
+	}
+
 	return rs;
 }
 
diff --git a/group/daemon/cman.c b/group/daemon/cman.c
index d70bf15..68b4a43 100644
--- a/group/daemon/cman.c
+++ b/group/daemon/cman.c
@@ -60,7 +60,7 @@ static int is_old_member(int nodeid)
 	return is_member(old_nodes, old_node_count, nodeid);
 }
 
-static int is_cman_member(int nodeid)
+int is_cman_member(int nodeid)
 {
 	return is_member(cman_nodes, cman_node_count, nodeid);
 }
diff --git a/group/daemon/gd_internal.h b/group/daemon/gd_internal.h
index d5a0b03..c95d057 100644
--- a/group/daemon/gd_internal.h
+++ b/group/daemon/gd_internal.h
@@ -278,6 +278,7 @@ int client_add(int fd, void (*workfn)(int ci), void (*deadfn)(int ci));
 void client_dead(int ci);
 
 /* cman.c */
+int is_cman_member(int nodeid);
 int setup_cman(void);
 int kill_cman(int nodeid);
 int shutdown_cman(void);


More information about the cluster-commits mailing list