All of lore.kernel.org
 help / color / mirror / Atom feed
From: lhh@sourceware.org <lhh@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] cluster/rgmanager ChangeLog src/daemons/groups ...
Date: 12 Dec 2007 21:41:33 -0000	[thread overview]
Message-ID: <20071212214133.18210.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2007-12-12 21:41:32

Modified files:
	rgmanager      : ChangeLog 
	rgmanager/src/daemons: groups.c slang_event.c 
	rgmanager/src/resources: default_event_script.sl 

Log message:
	Misc. minor central processing bugfixes

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&r1=1.63&r2=1.64
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/groups.c.diff?cvsroot=cluster&r1=1.41&r2=1.42
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/slang_event.c.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/default_event_script.sl.diff?cvsroot=cluster&r1=1.1&r2=1.2

--- cluster/rgmanager/ChangeLog	2007/12/12 15:27:34	1.63
+++ cluster/rgmanager/ChangeLog	2007/12/12 21:41:32	1.64
@@ -1,5 +1,12 @@
 2007-12-12 Lon Hohberger <lhh@redhat.com>
 	* Misc changes; add missing ds.h
+	* src/resources/default*.sl: Make clusvcadm -r go to a different
+	node.  Don't notice() that we're starting a service if it's
+	disabled.
+	* src/daemons/groups.c: Make clustat not interfere with startup
+	when central processing is enabled
+	* src/daemons/slang_event.c: Make clusvcadm correctly report
+	service owner after relocate/restart/enable requests.
 
 2007-11-30 Lon Hohberger <lhh@redhat.com>
 	* Commit RIND / S-Lang script engine [untested]
--- cluster/rgmanager/src/daemons/groups.c	2007/11/30 21:36:28	1.41
+++ cluster/rgmanager/src/daemons/groups.c	2007/12/12 21:41:32	1.42
@@ -1126,48 +1126,6 @@
 }
 
 
-#if 0
-/**
-  Send the state of the transition master to a given file descriptor.
-
-  @param fd		File descriptor to send state to
-  @param rgname		Resource group name whose state we want to send.
-  @see send_rg_states
- */
-void
-send_master_state(msgctx_t *ctx)
-{
-	rg_state_msg_t msg, *msgp = &msg;
-	event_master_t master;
-	rg_state_t *rs = &msg.rsm_state;
-
-	strncpy(rs->rs_name, "internal:CentralProcessor",
-		sizeof(rs->rs_name));
-	rs->rs_last_owner = 0;
-	rs->rs_restarts = 0;
-
-	if (event_master_info_cached(&master) < 0) {
-		rs->rs_owner = 0;
-		rs->rs_transition = master.m_master_time;
-		rs->rs_state = RG_STATE_UNINITIALIZED;
-	} else {
-		rs->rs_owner = master.m_nodeid;
-		rs->rs_transition = master.m_master_time;
-		rs->rs_state = RG_STATE_STARTED;
-	}
-
-	msgp->rsm_hdr.gh_magic = GENERIC_HDR_MAGIC;
-	msgp->rsm_hdr.gh_length = sizeof(msg);
-	msgp->rsm_hdr.gh_command = RG_STATUS;
-
-	swab_rg_state_msg_t(msgp);
-
-	if (msg_send(ctx, msgp, sizeof(msg)) < 0)
-		perror("msg_send");
-}
-#endif
-
-
 /**
   Send status from a thread because we don't want rgmanager's
   main thread to block in the case of DLM issues
@@ -1183,6 +1141,14 @@
 
 	free(arg);
 
+	if (central_events_enabled()) {
+		/* Never call get_rg_state() (distributed) if 
+		   central events are enabled, otherwise we
+		   might overwrite the rg state with 'stopped' 
+		   when it should be 'disabled' (e.g. autostart="0") */
+		fast = 1;
+	}
+
 	/* See if we have a slot... */
 	if (rg_inc_status() < 0) {
 		/* Too many outstanding status checks.  try again later. */
@@ -1327,6 +1293,7 @@
 	resource_node_t *curr;
 	rg_state_t svcblk;
 	char rg[64];
+	struct dlm_lksb lockp;
 	
 	/* Only one status thread@a time, please! */
 	if (pthread_mutex_trylock(&status_mutex) != 0)
@@ -1340,7 +1307,13 @@
 
 		/* Local check - no one will make us take a service */
 		if (get_rg_state_local(rg, &svcblk) < 0) {
-			continue;
+			if (rg_lock(rg, &lockp) != 0)
+				continue;
+			if (get_rg_state(rg, &svcblk) < 0) {
+				rg_unlock(&lockp);
+				continue;
+			}
+			rg_unlock(&lockp);
 		}
 
 		if (svcblk.rs_owner != my_id() ||
--- cluster/rgmanager/src/daemons/slang_event.c	2007/12/07 00:53:44	1.2
+++ cluster/rgmanager/src/daemons/slang_event.c	2007/12/12 21:41:32	1.3
@@ -487,7 +487,7 @@
 	char *svcname = NULL;
 	int *pref_list = NULL, pref_list_len = 0;
 	int *illegal_list = NULL, illegal_list_len = 0;
-	int nargs, t, x, ret = -1;
+	int nargs, t, newowner = 0, ret = -1;
 
 	nargs = SLang_Num_Function_Args;
 
@@ -528,8 +528,10 @@
 
 	/* TODO: Meat of function goes here */
 	ret = service_op_start(svcname, pref_list,
-			       pref_list_len, &x); ;
+			       pref_list_len, &newowner);
 
+	if (ret == 0 && newowner > 0)
+		ret = newowner;
 out:
 	if (svcname)
 		free(svcname);
@@ -1123,7 +1125,17 @@
 	/* XXX Send response code to caller - that 0 should be the
 	   new service owner, if there is one  */
 	if (ctx) {
-		send_ret(ctx, name, _user_return, request, 0);
+		if (_user_return > 0) {
+			/* sl_start_service() squashes return code and
+			   node ID into one value.  <0 = error, >0 =
+			   success, return-value == node id running
+			   service */
+			send_ret(ctx, name, 0, request, _user_return);
+		} else {
+			/* return value < 0 ... pass directly back;
+			   don't transpose */
+			send_ret(ctx, name, _user_return, request, 0);
+		}
 		msg_close(ctx);
 		msg_free_ctx(ctx);
 	}
--- cluster/rgmanager/src/resources/default_event_script.sl	2007/11/30 21:36:29	1.1
+++ cluster/rgmanager/src/resources/default_event_script.sl	2007/12/12 21:41:32	1.2
@@ -192,7 +192,8 @@
 		}
 
 		(owner, state) = service_status(services[x]);
-		if ((service_state == "started") and (owner < 0)) {
+		if ((service_state == "started") and (owner < 0) and
+		    (state == "stopped")) {
 			info("Dependency met; starting ", services[x]);
 			nodes = allowed_nodes(services[x]);
 			()=move_or_start(services[x], nodes);
@@ -245,6 +246,10 @@
 
 		if (user_target > 0) {
 			for (x = 0; x < length(nodes); x++) {
+				%
+				% Put the preferred node@the front of the 
+				% list for a user-relocate operation
+				%
 				if (nodes[x] == user_target) {
 					reordered = union(user_target, nodes);
 					nodes = reordered;
@@ -262,6 +267,13 @@
 			if (service_stop(service_name) < 0) {
 				return ERR_ABORT;
 			}
+
+			%
+			% The current owner shouldn't be the default
+			% for a relocate operation
+			%
+			reordered = subtract(nodes, owner);
+			nodes = union(reordered, owner);
 		}
 
 		ret = move_or_start(service_name, nodes);
@@ -275,7 +287,10 @@
 		ret = service_stop(service_name);
 
 	} 
+
+	%
 	% todo - migrate
+	%
 
 	return ret;
 }



             reply	other threads:[~2007-12-12 21:41 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-12-12 21:41 lhh [this message]
  -- strict thread matches above, loose matches on Subject: below --
2007-09-28 15:14 [Cluster-devel] cluster/rgmanager ChangeLog src/daemons/groups lhh
2007-07-31 18:26 lhh
2007-07-10 18:25 lhh
2007-07-10 18:24 lhh
2007-07-02 15:15 lhh
2007-07-02 15:13 lhh
2007-04-19 18:05 lhh
2007-04-19 17:59 lhh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071212214133.18210.qmail@sourceware.org \
    --to=lhh@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.