This is the mail archive of the cluster-cvs@sourceware.org mailing list for the cluster.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

cluster: RHEL5 - cman: Use the new openais exit APIs


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=36ac90224ae2668723df9679d1faecfebd3975c6
Commit:        36ac90224ae2668723df9679d1faecfebd3975c6
Parent:        be1c17d223b2c7afcd8261532e5a53225492dcf3
Author:        Christine Caulfield <ccaulfie@redhat.com>
AuthorDate:    Thu Jun 18 08:04:50 2009 +0100
Committer:     Christine Caulfield <ccaulfie@redhat.com>
CommitterDate: Thu Jun 18 08:04:50 2009 +0100

cman: Use the new openais exit APIs

When cman needs to shut down (eg killed by another node or cman_tool)
it now calls the openais exit APIs so that semaphores etc can be cleaned
up.

bz#505594

Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
---
 cman/daemon/ais.c      |    5 +++++
 cman/daemon/ais.h      |    5 +++++
 cman/daemon/commands.c |    8 ++++----
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/cman/daemon/ais.c b/cman/daemon/ais.c
index 817ce42..9a874a8 100644
--- a/cman/daemon/ais.c
+++ b/cman/daemon/ais.c
@@ -272,6 +272,11 @@ static int cman_exec_init_fn(struct objdb_iface_ver0 *objdb)
 	/* Open local sockets and initialise I/O queues */
 	cman_init();
 
+	/* Tell aisexec about reasons we will cause it to exit */
+	openais_shutdown_errorstring_register (CMAN_EXIT_AISEXEC_QUIT, "CMAN requested shutdown");
+	openais_shutdown_errorstring_register (CMAN_EXIT_AISEXEC_DISALLOWED, "CMAN joined disallowed cluster, exiting");
+	openais_shutdown_errorstring_register (CMAN_EXIT_AISEXEC_KILL, "CMAN kill requested, exiting");
+
 	/* Let cman_tool know we are running */
 	close(startup_pipe);
 	startup_pipe = 0;
diff --git a/cman/daemon/ais.h b/cman/daemon/ais.h
index db3bbd6..a5795bc 100644
--- a/cman/daemon/ais.h
+++ b/cman/daemon/ais.h
@@ -26,3 +26,8 @@ extern struct totem_ip_address mcast_addr[MAX_INTERFACES];
 extern struct totem_ip_address ifaddrs[MAX_INTERFACES];
 extern int num_interfaces;
 extern int num_ais_nodes;
+
+/* Reasons we kill aisexec */
+#define CMAN_EXIT_AISEXEC_QUIT       64
+#define CMAN_EXIT_AISEXEC_DISALLOWED 65
+#define CMAN_EXIT_AISEXEC_KILL       66
diff --git a/cman/daemon/commands.c b/cman/daemon/commands.c
index a67ad5a..710449e 100644
--- a/cman/daemon/commands.c
+++ b/cman/daemon/commands.c
@@ -851,7 +851,7 @@ static int do_cmd_leave_cluster(char *cmdbuf, int *retlen)
 
 	/* No messaging available yet, just die */
 	if (!we_are_a_cluster_member)
-		exit(0);
+		openais_shutdown(CMAN_EXIT_AISEXEC_QUIT);
 
 	send_leave(leave_flags);
 	use_count = 0;
@@ -1725,7 +1725,7 @@ static void do_process_transition(int nodeid, char *data, int len)
 	if (msg->flags & NODE_FLAGS_SEESDISALLOWED && !have_disallowed()) {
 		/* Must use syslog directly here or the message will never arrive */
 		syslog(LOG_CRIT, "CMAN: Joined a cluster with disallowed nodes. must die");
-		exit(2);
+		openais_shutdown(CMAN_EXIT_AISEXEC_DISALLOWED);
 	}
 	msg->flags &= ~NODE_FLAGS_SEESDISALLOWED;
 
@@ -1884,7 +1884,7 @@ static void process_internal_message(char *data, int len, int nodeid, int need_b
 		if (killmsg->nodeid == wanted_nodeid) {
 			log_msg(LOG_INFO, "cman killed by node %d because %s\n", nodeid,
 				killmsg_reason(killmsg->reason));
-			exit(1);
+			openais_shutdown(CMAN_EXIT_AISEXEC_KILL);
 		}
 		break;
 
@@ -1897,7 +1897,7 @@ static void process_internal_message(char *data, int len, int nodeid, int need_b
 			/* Tell whomever asked us to leave that we are now going down */
 			if (shutdown_con)
 				send_status_return(shutdown_con, CMAN_CMD_TRY_SHUTDOWN, 0);
-			exit(0);
+			openais_shutdown(CMAN_EXIT_AISEXEC_QUIT);
 		}
 
 		/* Someone else, make a note of the reason for leaving */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]