This is the mail archive of the
cluster-cvs@sourceware.org
mailing list for the cluster.
cluster: STABLE2 - cman: send fewer messages for each statetransition.
- From: Christine Caulfield <chrissie at fedoraproject dot org>
- To: cluster-cvs-relay at redhat dot com
- Date: Thu, 11 Jun 2009 10:03:04 +0000 (UTC)
- Subject: cluster: STABLE2 - cman: send fewer messages for each statetransition.
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=bdfd266ad5190c106ebc62ba4054f6b94725ff66
Commit: bdfd266ad5190c106ebc62ba4054f6b94725ff66
Parent: 899f274d7c39dda624325d1b6a0141377b1af038
Author: Christine Caulfield <ccaulfie@redhat.com>
AuthorDate: Tue Jan 20 14:14:26 2009 +0000
Committer: Christine Caulfield <ccaulfie@redhat.com>
CommitterDate: Thu Jun 11 11:02:57 2009 +0100
cman: send fewer messages for each state transition.
Only recalculate quorum (and tell everyone the result) if a node state
has actually changed.
Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
---
cman/daemon/commands.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/cman/daemon/commands.c b/cman/daemon/commands.c
index a592e7f..cf2f47a 100644
--- a/cman/daemon/commands.c
+++ b/cman/daemon/commands.c
@@ -1706,6 +1706,8 @@ static void do_process_transition(int nodeid, char *data, int len)
{
struct cl_transmsg *msg = (struct cl_transmsg *)data;
struct cluster_node *node;
+ unsigned int old_expected;
+ nodestate_t old_state;
if (valid_transition_msg(nodeid, msg) != 0) {
P_MEMB("Transition message from %d does not match current config - should quit ?\n", nodeid);
@@ -1727,6 +1729,8 @@ static void do_process_transition(int nodeid, char *data, int len)
node = find_node_by_nodeid(nodeid);
}
assert(node);
+ old_expected = node->expected_votes;
+ old_state = node->state;
P_MEMB("Got TRANSITION message. msg->flags=%x, node->flags=%x, first_trans=%d\n",
msg->flags, node->flags, msg->first_trans);
@@ -1787,7 +1791,9 @@ static void do_process_transition(int nodeid, char *data, int len)
/* Take into account any new expected_votes value that the new node has */
node->expected_votes = msg->expected_votes;
- recalculate_quorum(0, 0);
+
+ if (old_state != node->state || old_expected != node->expected_votes)
+ recalculate_quorum(0, 0);
if (node->fence_agent && msg->fence_agent[0] && strcmp(node->fence_agent, msg->fence_agent))
{