FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Cluster Development

 
 
LinkBack Thread Tools
 
Old 10-29-2010, 06:46 AM
"Fabio M. Di Nitto"
 
Default rgmanager: Work around lockspace release hang

ACK on both patches.

Fabio

On 10/28/2010 11:17 PM, Lon Hohberger wrote:
> If CMAN dies uncleanly (ex: because of cman_kill_node() call
> on another cluster node), rgmanager would hang trying to
> release the lock space, preventing it from exiting and causing
> it to spin.
>
> This patch works around the hang during unclean shutdown
> situations.
>
> Resolves: rhbz#639961
>
> Signed-off-by: Lon Hohberger <lhh@redhat.com>
> ---
> rgmanager/src/daemons/main.c | 11 ++++++++---
> 1 files changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/rgmanager/src/daemons/main.c b/rgmanager/src/daemons/main.c
> index 64c32a3..52e38bc 100644
> --- a/rgmanager/src/daemons/main.c
> +++ b/rgmanager/src/daemons/main.c
> @@ -64,7 +64,7 @@ int node_has_fencing(int nodeid);
> int fence_domain_joined(void);
>
> int cluster_timeout = 10;
> -int shutdown_pending = 0, running = 1, need_reconfigure = 0;
> +int shutdown_pending = 0, running = 1, need_reconfigure = 0, dying = 0;
> char debug = 0; /* XXX* */
> static int signalled = 0;
> static int port = RG_PORT;
> @@ -676,12 +676,14 @@ handle_cluster_event(msgctx_t *ctx)
> msg_receive(ctx, NULL, 0, 0);
> clulog(LOG_WARNING, "#67: Shutting down uncleanly
");
> rg_set_inquorate();
> - rg_doall(RG_INIT, 1, "Emergency stop of %s");
> + rg_doall(RG_INIT, 1, "Emergency stop of %s
");
> rg_clear_initialized(0);
> #if defined(LIBCMAN_VERSION) && LIBCMAN_VERSION >= 2
> /* cman_replyto_shutdown() */
> #endif
> running = 0;
> + dying = 1; /* XXX Hack to work around hang during
> + unclean lockspace release */
> break;
> }
>
> @@ -1180,7 +1182,10 @@ main(int argc, char **argv)
> cleanup(cluster_ctx);
>
> out_cleanup:
> - clu_lock_finished(rgmanager_lsname);
> + /* XXX - This hangs if CMAN has died, so we skip if we are
> + * exiting uncleanly. */
> + if (!dying)
> + clu_lock_finished(rgmanager_lsname);
>
> out:
> clulog(LOG_NOTICE, "Shutdown complete, exiting
");
 

Thread Tools




All times are GMT. The time now is 05:02 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org