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