Explorar el Código

quorum: Return qdevice nodeid in the quorum callbacks (if active).

Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
Christine Caulfield hace 9 años
padre
commit
c9c6d9e30f
Se han modificado 2 ficheros con 16 adiciones y 6 borrados
  1. 15 5
      exec/votequorum.c
  2. 1 1
      exec/vsf_quorum.c

+ 15 - 5
exec/votequorum.c

@@ -202,7 +202,7 @@ static uint8_t cluster_is_quorate;
 
 
 static struct cluster_node *us;
 static struct cluster_node *us;
 static struct list_head cluster_members_list;
 static struct list_head cluster_members_list;
-static unsigned int quorum_members[PROCESSOR_COUNT_MAX];
+static unsigned int quorum_members[PROCESSOR_COUNT_MAX+1];
 static unsigned int previous_quorum_members[PROCESSOR_COUNT_MAX];
 static unsigned int previous_quorum_members[PROCESSOR_COUNT_MAX];
 static unsigned int atb_nodelist[PROCESSOR_COUNT_MAX];
 static unsigned int atb_nodelist[PROCESSOR_COUNT_MAX];
 static int quorum_members_entries = 0;
 static int quorum_members_entries = 0;
@@ -984,6 +984,18 @@ static int calculate_quorum(int allow_decrease, unsigned int max_expected, unsig
 	return newquorum;
 	return newquorum;
 }
 }
 
 
+static void do_quorum_callback(void)
+{
+	int real_num_entries = quorum_members_entries;
+
+	if (us->flags & NODE_FLAGS_QDEVICE_ALIVE) {
+		quorum_members[quorum_members_entries] = VOTEQUORUM_QDEVICE_NODEID;
+		real_num_entries += 1;
+	}
+	quorum_callback(quorum_members, real_num_entries,
+			cluster_is_quorate, &quorum_ringid);
+}
+
 static void are_we_quorate(unsigned int total_votes)
 static void are_we_quorate(unsigned int total_votes)
 {
 {
 	int quorate;
 	int quorate;
@@ -1057,8 +1069,7 @@ static void are_we_quorate(unsigned int total_votes)
 
 
 	if ((quorum_change) &&
 	if ((quorum_change) &&
 	    (sync_in_progress == 0)) {
 	    (sync_in_progress == 0)) {
-		quorum_callback(quorum_members, quorum_members_entries,
-				cluster_is_quorate, &quorum_ringid);
+		do_quorum_callback();
 		votequorum_exec_send_quorum_notification(NULL, 0L);
 		votequorum_exec_send_quorum_notification(NULL, 0L);
 	}
 	}
 
 
@@ -2417,8 +2428,7 @@ static int votequorum_sync_process (void)
 static void votequorum_sync_activate (void)
 static void votequorum_sync_activate (void)
 {
 {
 	recalculate_quorum(0, 0);
 	recalculate_quorum(0, 0);
-	quorum_callback(quorum_members, quorum_members_entries,
-			cluster_is_quorate, &quorum_ringid);
+	do_quorum_callback();
 	votequorum_exec_send_quorum_notification(NULL, 0L);
 	votequorum_exec_send_quorum_notification(NULL, 0L);
 
 
 	sync_in_progress = 0;
 	sync_in_progress = 0;

+ 1 - 1
exec/vsf_quorum.c

@@ -107,7 +107,7 @@ static struct list_head lib_trackers_list;
 static struct list_head internal_trackers_list;
 static struct list_head internal_trackers_list;
 static struct memb_ring_id quorum_ring_id;
 static struct memb_ring_id quorum_ring_id;
 static size_t quorum_view_list_entries = 0;
 static size_t quorum_view_list_entries = 0;
-static int quorum_view_list[PROCESSOR_COUNT_MAX];
+static int quorum_view_list[PROCESSOR_COUNT_MAX+1];
 struct quorum_services_api_ver1 *quorum_iface = NULL;
 struct quorum_services_api_ver1 *quorum_iface = NULL;
 static char view_buf[64];
 static char view_buf[64];