Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > d236c5da97a239a1b6991cfba2865b66 > files > 113

cman-2.0.115-68.el5_6.1.src.rpm

commit 23d5cbe5dfcf20040814a09aafa33faf9f6f66e9
Author: David Teigland <teigland@redhat.com>
Date:   Tue Dec 8 15:58:02 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@redhat.com>

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);