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-28-2010, 09:17 PM
Lon Hohberger
 
Default rgmanager: Work around lockspace release hang

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
");
--
1.7.2.3
 

Thread Tools




All times are GMT. The time now is 05:19 PM.

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