clvmd-corosync: use libquorum callbacks instead of polling
PATCH 1/1 clvmd-corosync: use libquorum callbacks instead of polling
From: "Fabio M. Di Nitto" <[email protected]>
clvmd polls for quorum status every minute (from the main loop). With the new libquorum, this is unnecessary since clvmd can receive quorum updates via callbacks.
Signed-off-by Fabio M. Di Nitto <[email protected]>
--- daemons/clvmd/clvmd-corosync.c | 42 +++++++++++++++++++++++++++++++++++++++- 1 files changed, 41 insertions(+), 1 deletions(-)
daemons/clvmd/clvmd-corosync.c +41 -1
@@ -83,9 +83,24 @@ cpg_callbacks_t corosync_cpg_callbacks = { .cpg_confchg_fn = corosync_cpg_confchg_callback, }; +static int quorate =0 ; + +#ifdef QUORUM_SET +static void quorum_notification_callback ( +quorum_handle_t handle, +uint32_t quorate, +uint64_t ring_id, +uint32_t view_list_entries, +uint32_t *view_list); + +quorum_callbacks_t quorum_callbacks = { + .quorum_notify_fn = quorum_notification_callback +}; +#else quorum_callbacks_t quorum_callbacks = { .quorum_notify_fn =NULL , }; +#endif struct node_info {
@@ -307,6 +322,14 @@ static int _init_cluster(void)DEBUGLOG ("Corosync quorum service is not configured" ); return EINVAL; } + +/* Initiliaze quorate status before callbacks */ +if (quorum_getquorate (quorum_handle, &quorate) !=CS_OK ) { +syslog (LOG_ERR ,"Unable to determine quorate status for this node" ); +DEBUGLOG ("Unable to determine quorate status for this node\n" ); + quorate =0 ; + } +DEBUGLOG ("Initial quorate status: %u\n" , quorate);#else err =quorum_initialize (&quorum_handle, &quorum_callbacks);
@@ -528,14 +551,31 @@ static int _unlock_resource(const char *resource, int lockid)return 0 ; } +#ifdef QUORUM_SET +static void quorum_notification_callback ( +quorum_handle_t handle, +uint32_t quorate_status, +uint64_t ring_id, +uint32_t view_list_entries, +uint32_t *view_list) +{ +DEBUGLOG ("quorum_notification_callback. quorate: %u" , quorate_status); + quorate = quorate_status; +} + +static int _is_quorate () +{ +return quorate; +} +#else static int _is_quorate () { -int quorate;if (quorum_getquorate (quorum_handle, &quorate) ==CS_OK )return quorate;else return 0 ; } +#endif static int _get_main_cluster_fd (void ) {
Signature · 1 line
1.7.7.6
PATCH 1/1 clvmd-corosync: use libquorum callbacks instead of polling
Please disregard this patch, it?s not correct.
Fabio
Quoted 88 lines · Fabio M. Di Nitto
From: "Fabio M. Di Nitto" <[email protected]>
clvmd polls for quorum status every minute (from the main loop). With the new libquorum, this is unnecessary since clvmd can receive quorum updates via callbacks.
Signed-off-by Fabio M. Di Nitto <[email protected]>--- daemons/clvmd/clvmd-corosync.c | 42 +++++++++++++++++++++++++++++++++++++++- 1 files changed, 41 insertions(+), 1 deletions(-)daemons/clvmd/clvmd-corosync.c +41
-1@@ -83,9 +83,24 @@ cpg_callbacks_t corosync_cpg_callbacks = { .cpg_confchg_fn = corosync_cpg_confchg_callback, }; +static int quorate =0 ; + +#ifdef QUORUM_SET +static void quorum_notification_callback ( +quorum_handle_t handle, +uint32_t quorate, +uint64_t ring_id, +uint32_t view_list_entries, +uint32_t *view_list); + +quorum_callbacks_t quorum_callbacks = { + .quorum_notify_fn = quorum_notification_callback +}; +#else quorum_callbacks_t quorum_callbacks = { .quorum_notify_fn =NULL , }; +#endif struct node_info {@@ -307,6 +322,14 @@ static int _init_cluster(void)DEBUGLOG ("Corosync quorum service is not configured" ); return EINVAL; } + +/* Initiliaze quorate status before callbacks */ +if (quorum_getquorate (quorum_handle, &quorate) !=CS_OK ) { +syslog (LOG_ERR ,"Unable to determine quorate status for this node" ); +DEBUGLOG ("Unable to determine quorate status for this node\n" ); + quorate =0 ; + } +DEBUGLOG ("Initial quorate status: %u\n" , quorate);#else err =quorum_initialize (&quorum_handle, &quorum_callbacks);@@ -528,14 +551,31 @@ static int _unlock_resource(const char *resource, int lockid)return 0 ; } +#ifdef QUORUM_SET +static void quorum_notification_callback ( +quorum_handle_t handle, +uint32_t quorate_status, +uint64_t ring_id, +uint32_t view_list_entries, +uint32_t *view_list) +{ +DEBUGLOG ("quorum_notification_callback. quorate: %u" , quorate_status); + quorate = quorate_status; +} + +static int _is_quorate () +{ +return quorate; +} +#else static int _is_quorate () { -int quorate;if (quorum_getquorate (quorum_handle, &quorate) ==CS_OK )return quorate;else return 0 ; } +#endif static int _get_main_cluster_fd (void ) {