From: pcaulfield@sourceware.org <pcaulfield@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] cluster/cman/daemon commands.c
Date: 17 Sep 2007 13:35:36 -0000 [thread overview]
Message-ID: <20070917133536.26467.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: cluster
Branch: RHEL5
Changes by: pcaulfield at sourceware.org 2007-09-17 13:35:35
Modified files:
cman/daemon : commands.c
Log message:
Correctly reduce quorum when a node leaves using "cman_tool leave remove"
bz#271701
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/commands.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.55.2.10&r2=1.55.2.11
--- cluster/cman/daemon/commands.c 2007/09/17 13:22:31 1.55.2.10
+++ cluster/cman/daemon/commands.c 2007/09/17 13:35:35 1.55.2.11
@@ -95,7 +95,7 @@
static int send_port_open_msg(unsigned char port);
static int send_port_enquire(int nodeid);
static void process_internal_message(char *data, int len, int nodeid, int byteswap);
-static void recalculate_quorum(int allow_decrease);
+static void recalculate_quorum(int allow_decrease, int by_current_nodes);
static void send_kill(int nodeid, uint16_t reason);
static char *killmsg_reason(int reason);
@@ -326,11 +326,11 @@
}
/* Recalculate cluster quorum, set quorate and notify changes */
-static void recalculate_quorum(int allow_decrease)
+static void recalculate_quorum(int allow_decrease, int by_current_nodes)
{
unsigned int total_votes;
- quorum = calculate_quorum(allow_decrease, 0, &total_votes);
+ quorum = calculate_quorum(allow_decrease, by_current_nodes?cluster_members:0, &total_votes);
set_quorate(total_votes);
notify_listeners(NULL, EVENT_REASON_STATECHANGE, 0);
}
@@ -790,7 +790,7 @@
return -EINVAL;
}
- recalculate_quorum(1);
+ recalculate_quorum(1, 0);
send_reconfigure(arg.nodeid, RECONFIG_PARAM_NODE_VOTES, arg.newvotes);
@@ -1033,7 +1033,7 @@
else {
log_msg(LOG_ERR, "Now got CCS information version %d, continuing\n", config_version);
config_error = 0;
- recalculate_quorum(0);
+ recalculate_quorum(0, 0);
}
}
@@ -1048,7 +1048,7 @@
if (quorum_device->last_hello.tv_sec + quorumdev_poll/1000 < now.tv_sec) {
quorum_device->state = NODESTATE_DEAD;
log_msg(LOG_INFO, "lost contact with quorum device\n");
- recalculate_quorum(0);
+ recalculate_quorum(0, 0);
}
else {
openais_timer_add_duration((unsigned long long)quorumdev_poll*1000000, quorum_device,
@@ -1069,7 +1069,7 @@
gettimeofday(&quorum_device->last_hello, NULL);
if (quorum_device->state == NODESTATE_DEAD) {
quorum_device->state = NODESTATE_MEMBER;
- recalculate_quorum(0);
+ recalculate_quorum(0, 0);
openais_timer_add_duration((unsigned long long)quorumdev_poll*1000000, quorum_device,
quorum_device_timer_fn, &quorum_device_timer);
@@ -1078,7 +1078,7 @@
else {
if (quorum_device->state == NODESTATE_MEMBER) {
quorum_device->state = NODESTATE_DEAD;
- recalculate_quorum(0);
+ recalculate_quorum(0, 0);
openais_timer_delete(quorum_device_timer);
}
}
@@ -1504,7 +1504,7 @@
if (config_version > msg->config_version) {
// TODO tell everyone else to update...
}
- recalculate_quorum(0);
+ recalculate_quorum(0, 0);
}
@@ -1641,12 +1641,12 @@
node->expected_votes = msg->value;
}
}
- recalculate_quorum(1); /* Allow decrease */
+ recalculate_quorum(1, 0); /* Allow decrease */
break;
case RECONFIG_PARAM_NODE_VOTES:
node->votes = msg->value;
- recalculate_quorum(1); /* Allow decrease */
+ recalculate_quorum(1, 0); /* Allow decrease */
break;
case RECONFIG_PARAM_CONFIG_VERSION:
@@ -1655,7 +1655,7 @@
msg->value);
config_error = 1;
- recalculate_quorum(0);
+ recalculate_quorum(0, 0);
wanted_config_version = config_version;
openais_timer_add_duration((unsigned long long)ccsd_poll_interval*1000000, NULL,
@@ -1968,7 +1968,7 @@
node->incarnation = incarnation;
node->state = NODESTATE_MEMBER;
cluster_members++;
- recalculate_quorum(0);
+ recalculate_quorum(0, 0);
}
}
@@ -1998,7 +1998,7 @@
case NODESTATE_MEMBER:
node->state = NODESTATE_DEAD;
cluster_members--;
- recalculate_quorum(0);
+ recalculate_quorum(0, 0);
break;
case NODESTATE_AISONLY:
@@ -2009,10 +2009,10 @@
node->state = NODESTATE_DEAD;
cluster_members--;
- if ((node->leave_reason & 0xF) == CLUSTER_LEAVEFLAG_REMOVED)
- recalculate_quorum(1);
- else
- recalculate_quorum(0);
+ if ((node->leave_reason & 0xF) & CLUSTER_LEAVEFLAG_REMOVED)
+ recalculate_quorum(1, 1);
+ else
+ recalculate_quorum(0, 0);
break;
case NODESTATE_JOINING:
next reply other threads:[~2007-09-17 13:35 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-17 13:35 pcaulfield [this message]
-- strict thread matches above, loose matches on Subject: below --
2008-02-04 10:54 [Cluster-devel] cluster/cman/daemon commands.c pcaulfield
2008-01-03 16:36 pcaulfield
2008-01-03 16:35 pcaulfield
2008-01-03 20:40 ` Fabio M. Di Nitto
2008-01-03 6:48 fabbione
2008-01-02 16:23 pcaulfield
2008-01-02 10:02 pcaulfield
2008-01-02 9:27 pcaulfield
2007-11-26 17:03 lhh
2007-11-20 9:21 pcaulfield
2007-11-20 9:02 pcaulfield
2007-09-27 9:05 pcaulfield
2007-09-27 9:01 pcaulfield
2007-09-07 12:17 pcaulfield
2007-08-22 7:05 pcaulfield
2007-01-17 15:02 pcaulfield
2007-01-17 15:02 pcaulfield
2007-01-17 11:01 pcaulfield
2007-01-17 14:50 ` Robert Peterson
2007-01-17 11:00 pcaulfield
2007-01-16 16:31 pcaulfield
2007-01-16 9:57 pcaulfield
2007-01-16 9:54 pcaulfield
2007-01-09 13:32 pcaulfield
2007-01-09 13:31 pcaulfield
2007-01-08 10:16 pcaulfield
2007-01-08 10:16 pcaulfield
2006-12-13 14:20 pcaulfield
2006-12-13 13:39 pcaulfield
2006-12-13 13:38 pcaulfield
2006-11-06 10:06 pcaulfield
2006-10-16 14:10 pcaulfield
2006-10-10 15:14 pcaulfield
2006-09-12 12:45 pcaulfield
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070917133536.26467.qmail@sourceware.org \
--to=pcaulfield@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).