Returning ring id will be used in poll function. Signed-off-by: Jan Friesse <jfriesse@xxxxxxxxxx> --- cts/agents/votequorum_test_agent.c | 1 + exec/votequorum.c | 3 +++ include/corosync/ipc_votequorum.h | 14 ++++++++++++++ include/corosync/votequorum.h | 6 ++++++ lib/votequorum.c | 3 +++ man/votequorum_initialize.3.in | 5 +++++ test/testvotequorum1.c | 3 +++ 7 files changed, 35 insertions(+), 0 deletions(-) diff --git a/cts/agents/votequorum_test_agent.c b/cts/agents/votequorum_test_agent.c index e460f25..c61a4af 100644 --- a/cts/agents/votequorum_test_agent.c +++ b/cts/agents/votequorum_test_agent.c @@ -61,6 +61,7 @@ static void votequorum_notification_fn( votequorum_handle_t handle, uint64_t context, uint32_t quorate, + votequorum_ring_id_t ring_id, uint32_t node_list_entries, votequorum_node_t node_list[]) { diff --git a/exec/votequorum.c b/exec/votequorum.c index d365147..54b6fbe 100644 --- a/exec/votequorum.c +++ b/exec/votequorum.c @@ -49,6 +49,7 @@ #include <corosync/logsys.h> #include <corosync/coroapi.h> #include <corosync/icmap.h> +#include <corosync/votequorum.h> #include <corosync/ipc_votequorum.h> #include "service.h" @@ -1677,6 +1678,8 @@ static int votequorum_exec_send_quorum_notification(void *conn, uint64_t context res_lib_votequorum_notification = (struct res_lib_votequorum_notification *)&buf; res_lib_votequorum_notification->quorate = cluster_is_quorate; res_lib_votequorum_notification->node_list_entries = cluster_members; + res_lib_votequorum_notification->ring_id.nodeid = quorum_ringid.rep.nodeid; + res_lib_votequorum_notification->ring_id.seq = quorum_ringid.seq; res_lib_votequorum_notification->context = context; list_iterate(tmp, &cluster_members_list) { node = list_entry(tmp, struct cluster_node, list); diff --git a/include/corosync/ipc_votequorum.h b/include/corosync/ipc_votequorum.h index c7bb3ed..0fdcd8b 100644 --- a/include/corosync/ipc_votequorum.h +++ b/include/corosync/ipc_votequorum.h @@ -61,6 +61,11 @@ enum res_votequorum_types { MESSAGE_RES_VOTEQUORUM_EXPECTEDVOTES_NOTIFICATION }; +struct mar_votequorum_ring_id { + mar_uint32_t nodeid; + mar_uint64_t seq; +}; + struct req_lib_votequorum_qdevice_register { struct qb_ipc_request_header header __attribute__((aligned(8))); char name[VOTEQUORUM_QDEVICE_MAX_NAME_LEN]; @@ -157,6 +162,7 @@ struct res_lib_votequorum_notification { struct qb_ipc_response_header header __attribute__((aligned(8))); mar_uint32_t quorate __attribute__((aligned(8))); mar_uint64_t context __attribute__((aligned(8))); + struct mar_votequorum_ring_id ring_id __attribute__((aligned(8))); mar_uint32_t node_list_entries __attribute__((aligned(8))); struct votequorum_node node_list[] __attribute__((aligned(8))); }; @@ -167,4 +173,12 @@ struct res_lib_votequorum_expectedvotes_notification { mar_uint32_t expected_votes __attribute__((aligned(8))); }; +static inline void marshall_from_mar_votequorum_ring_id ( + votequorum_ring_id_t *dest, + const struct mar_votequorum_ring_id *src) +{ + dest->nodeid = src->nodeid; + dest->seq = src->seq; +}; + #endif diff --git a/include/corosync/votequorum.h b/include/corosync/votequorum.h index c85f281..bba964b 100644 --- a/include/corosync/votequorum.h +++ b/include/corosync/votequorum.h @@ -81,10 +81,16 @@ typedef struct { uint32_t state; } votequorum_node_t; +typedef struct { + uint32_t nodeid; + uint64_t seq; +} votequorum_ring_id_t; + typedef void (*votequorum_notification_fn_t) ( votequorum_handle_t handle, uint64_t context, uint32_t quorate, + votequorum_ring_id_t ring_id, uint32_t node_list_entries, votequorum_node_t node_list[]); diff --git a/lib/votequorum.c b/lib/votequorum.c index 56ac517..20843cf 100644 --- a/lib/votequorum.c +++ b/lib/votequorum.c @@ -438,6 +438,7 @@ cs_error_t votequorum_dispatch ( struct res_lib_votequorum_notification *res_lib_votequorum_notification; struct res_lib_votequorum_expectedvotes_notification *res_lib_votequorum_expectedvotes_notification; char dispatch_buf[IPC_DISPATCH_SIZE]; + votequorum_ring_id_t ring_id; if (dispatch_types != CS_DISPATCH_ONE && dispatch_types != CS_DISPATCH_ALL && @@ -507,10 +508,12 @@ cs_error_t votequorum_dispatch ( break; } res_lib_votequorum_notification = (struct res_lib_votequorum_notification *)dispatch_data; + marshall_from_mar_votequorum_ring_id (&ring_id, &res_lib_votequorum_notification->ring_id); callbacks.votequorum_notify_fn ( handle, res_lib_votequorum_notification->context, res_lib_votequorum_notification->quorate, + ring_id, res_lib_votequorum_notification->node_list_entries, (votequorum_node_t *)res_lib_votequorum_notification->node_list ); ; diff --git a/man/votequorum_initialize.3.in b/man/votequorum_initialize.3.in index 64b78de..b74f964 100644 --- a/man/votequorum_initialize.3.in +++ b/man/votequorum_initialize.3.in @@ -64,6 +64,11 @@ typedef void (*votequorum_notification_fn_t) ( ); .fi + +Current ring_id (one get in votequorum_notification_fn) have to be passed to +.B votequorum_qdevice_poll +to make qdevice voting valid. + .PP Every time the expected votes are changed, the callback is called. The expected votes callback function is described by the following type definitions: diff --git a/test/testvotequorum1.c b/test/testvotequorum1.c index 0e443c3..87547ae 100644 --- a/test/testvotequorum1.c +++ b/test/testvotequorum1.c @@ -35,6 +35,7 @@ #include <config.h> #include <sys/types.h> +#include <inttypes.h> #include <stdio.h> #include <string.h> #include <stdint.h> @@ -79,6 +80,7 @@ static void votequorum_notification_fn( votequorum_handle_t handle, uint64_t context, uint32_t quorate, + votequorum_ring_id_t ring_id, uint32_t node_list_entries, votequorum_node_t node_list[] ) @@ -88,6 +90,7 @@ static void votequorum_notification_fn( printf("votequorum notification called \n"); printf(" quorate = %d\n", quorate); printf(" number of nodes = %d\n", node_list_entries); + printf(" current ringid = (%u.%"PRIu64")\n", ring_id.nodeid, ring_id.seq); for (i = 0; i< node_list_entries; i++) { printf(" %d: %s\n", node_list[i].nodeid, node_state(node_list[i].state)); -- 1.7.1 _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss