[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Cluster-devel] [PATCH] RHEL5 cman: Don't increment on LEAVING->MEMBER transition

If a node left the cluster prior using 'cman_tool leave', its
internal state is set to NODESTATE_LEAVING.

Ordinarily, during the transition from NODESTATE_LEAVING to
NODESTATE_DEAD, the member count is decremented.  However, it
is possible to rejoin the cluster membership from the

If this occurs, the cluster member count is incremented, but
since the node never transitioned from LEAVING->DEAD, it was
not previously decremented, causing an ever-increasing node
count in 'cman_tool status'.

This patch resolves the issue by not incrementing the member
count during a LEAVING->MEMBER transition.

Resolves: rhbz#649533

Signed-off-by: Lon Hohberger <lhh redhat com>
 cman/daemon/commands.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/cman/daemon/commands.c b/cman/daemon/commands.c
index 6ffe9e5..6c91d7a 100644
--- a/cman/daemon/commands.c
+++ b/cman/daemon/commands.c
@@ -1994,9 +1994,12 @@ void add_ais_node(int nodeid, uint64_t incarnation, int total_members)
 	if (node->state == NODESTATE_DEAD || node->state == NODESTATE_LEAVING) {
 		gettimeofday(&node->join_time, NULL);
+		/* If a node rejoins before it completes a leave,
+		 * we should not increment cluster_members */
+		if (node->state != NODESTATE_LEAVING)
+			cluster_members++;
 		node->incarnation = incarnation;
 		node->state = NODESTATE_MEMBER;
-		cluster_members++;
 		recalculate_quorum(0, 0);

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]