Reviewed-by: Steven Dake <sdake@xxxxxxxxxx> On 01/10/2012 02:23 AM, Fabio M. Di Nitto wrote: > From: "Fabio M. Di Nitto" <fdinitto@xxxxxxxxxx> > > this flag (0|1) can be configured via quorum.wait_for_all and changes > behavior when granting quorum for the first time. > > Normal behavior (default / 0) grants quorum as soon as enough nodes > are available in a cluster. > > Setting this value to 1 will grant quorum only after all cluster > memembers are part of the cluster at the same time. > > Signed-off-by: Fabio M. Di Nitto <fdinitto@xxxxxxxxxx> > --- > :100644 100644 98e5189... abbd512... M exec/coroparse.c > :100644 100644 6d8a603... 3ba5978... M services/votequorum.c > exec/coroparse.c | 1 + > services/votequorum.c | 20 ++++++++++++++++++++ > 2 files changed, 21 insertions(+), 0 deletions(-) > > diff --git a/exec/coroparse.c b/exec/coroparse.c > index 98e5189..abbd512 100644 > --- a/exec/coroparse.c > +++ b/exec/coroparse.c > @@ -368,6 +368,7 @@ static int main_config_parser_cb(const char *path, > > if ((strcmp(path, "quorum.disallowed") == 0) || > (strcmp(path, "quorum.two_node") == 0) || > + (strcmp(path, "quorum.wait_for_all") == 0) || > (strcmp(path, "quorum.quorate") == 0)) { > i = atoi(value); > icmap_set_uint8(path, i); > diff --git a/services/votequorum.c b/services/votequorum.c > index 6d8a603..3ba5978 100644 > --- a/services/votequorum.c > +++ b/services/votequorum.c > @@ -124,6 +124,7 @@ static int cluster_is_quorate; > static int first_trans = 1; > static unsigned int quorumdev_poll = DEFAULT_QDEV_POLL; > static unsigned int leaving_timeout = DEFAULT_LEAVE_TMO; > +static uint8_t wait_for_all = 0; > > static struct cluster_node *us; > static struct cluster_node *quorum_device = NULL; > @@ -385,6 +386,8 @@ static void votequorum_init(struct corosync_api_v1 *api, > ENTER(); > set_quorum = report; > > + icmap_get_uint8("quorum.wait_for_all", &wait_for_all); > + > /* Load the library-servicing part of this module */ > api->service_link_and_init(api, "corosync_votequorum_iface", 0); > > @@ -608,6 +611,23 @@ static void set_quorate(int total_votes) > int quorate; > > ENTER(); > + > + /* > + * wait for all nodes to show up before granting quorum > + */ > + > + if (wait_for_all) { > + if (total_votes != us->expected_votes) { > + log_printf(LOGSYS_LEVEL_NOTICE, > + "Waiting for all cluster members. " > + "Current votes: %d expected_votes: %d\n", > + total_votes, us->expected_votes); > + cluster_is_quorate = 0; > + return; > + } > + wait_for_all = 0; > + } > + > if (quorum > total_votes) { > quorate = 0; > } _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss