[lvm-devel] [PATCH] clvmd-corosync: use libquorum callbacks instead of polling
Fabio M. Di Nitto
fdinitto at redhat.com
Tue Feb 7 08:55:10 UTC 2012
Please disregard this patch, it´s not correct.
Fabio
On 2/6/2012 3:48 PM, Fabio M. Di Nitto wrote:
> From: "Fabio M. Di Nitto" <fdinitto at redhat.com>
>
> 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 <fdinitto at redhat.com>
> ---
> daemons/clvmd/clvmd-corosync.c | 42 +++++++++++++++++++++++++++++++++++++++-
> 1 files changed, 41 insertions(+), 1 deletions(-)
>
> diff --git a/daemons/clvmd/clvmd-corosync.c b/daemons/clvmd/clvmd-corosync.c
> index d85ec1e..eaab023 100644
> --- a/daemons/clvmd/clvmd-corosync.c
> +++ b/daemons/clvmd/clvmd-corosync.c
> @@ -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)
> {
More information about the lvm-devel
mailing list