|
@@ -666,6 +666,7 @@ static int check_low_node_id_partition(void)
|
|
|
static void set_quorate(int total_votes)
|
|
static void set_quorate(int total_votes)
|
|
|
{
|
|
{
|
|
|
int quorate;
|
|
int quorate;
|
|
|
|
|
+ int quorum_change = 0;
|
|
|
|
|
|
|
|
ENTER();
|
|
ENTER();
|
|
|
|
|
|
|
@@ -699,14 +700,21 @@ static void set_quorate(int total_votes)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (cluster_is_quorate && !quorate) {
|
|
if (cluster_is_quorate && !quorate) {
|
|
|
|
|
+ quorum_change = 1;
|
|
|
log_printf(LOGSYS_LEVEL_INFO, "quorum lost, blocking activity\n");
|
|
log_printf(LOGSYS_LEVEL_INFO, "quorum lost, blocking activity\n");
|
|
|
}
|
|
}
|
|
|
if (!cluster_is_quorate && quorate) {
|
|
if (!cluster_is_quorate && quorate) {
|
|
|
|
|
+ quorum_change = 1;
|
|
|
log_printf(LOGSYS_LEVEL_INFO, "quorum regained, resuming activity\n");
|
|
log_printf(LOGSYS_LEVEL_INFO, "quorum regained, resuming activity\n");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
cluster_is_quorate = quorate;
|
|
cluster_is_quorate = quorate;
|
|
|
|
|
|
|
|
|
|
+ if (quorum_change) {
|
|
|
|
|
+ set_quorum(quorum_members, quorum_members_entries,
|
|
|
|
|
+ cluster_is_quorate, &quorum_ringid);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
LEAVE();
|
|
LEAVE();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1020,7 +1028,9 @@ static void quorum_confchg_fn (
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
memcpy(&quorum_ringid, ring_id, sizeof(*ring_id));
|
|
memcpy(&quorum_ringid, ring_id, sizeof(*ring_id));
|
|
|
- set_quorum(quorum_members, quorum_members_entries, cluster_is_quorate, &quorum_ringid);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ set_quorum(quorum_members, quorum_members_entries,
|
|
|
|
|
+ cluster_is_quorate, &quorum_ringid);
|
|
|
|
|
|
|
|
LEAVE();
|
|
LEAVE();
|
|
|
}
|
|
}
|