cluster: STABLE32 - rgmanager: Fix dependency issue related to ordering

Lon Hohberger lon at fedoraproject.org
Thu Jan 5 15:59:38 UTC 2012


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=4b7a2a2cc9b87ec9e31d6d4b05ee11c5519deb41
Commit:        4b7a2a2cc9b87ec9e31d6d4b05ee11c5519deb41
Parent:        663efa987ba58aa79eb66dfdcdedbbd905886cf4
Author:        Lon Hohberger <lhh at redhat.com>
AuthorDate:    Thu Jan 5 10:43:12 2012 -0500
Committer:     Lon Hohberger <lhh at redhat.com>
CommitterDate: Thu Jan 5 10:53:32 2012 -0500

rgmanager: Fix dependency issue related to ordering

If you ordered two services the opposite way in cluster.conf
('b' first, which depends on 'a'), then rgmanager would fail
over 'b' despite the fact that 'a' was not running yet - this
is because the state of 'a' was not set to 'stopped' - so we
need to check for a node-death event in move_or_start().

Signed-off-by: Lon Hohberger <lhh at redhat.com>
---
 rgmanager/src/resources/default_event_script.sl |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/rgmanager/src/resources/default_event_script.sl b/rgmanager/src/resources/default_event_script.sl
index bd445c0..4cdf519 100644
--- a/rgmanager/src/resources/default_event_script.sl
+++ b/rgmanager/src/resources/default_event_script.sl
@@ -176,7 +176,9 @@ define move_or_start(service, node_list)
 	depends = service_property(service, "depend");
 	if (depends != "") {
 		(,,, owner, state) = service_status(depends);
-		if (owner < 0) {
+		if ((owner < 0) or
+                    ((event_type == EVENT_NODE) and (owner == node_id) and
+		     (node_state == 0))) {
 			debug(service, " is not runnable; dependency not met");
 			()=service_stop(service);
 			return ERR_DEPEND;
@@ -541,8 +543,8 @@ define default_service_event_handler()
 			(s_trans,,,,,, s_state) = service_status(service_name, 1);
 			if ((s_state == "started") and (state == "started") and
 			    (d_trans >= s_trans)) {
-				%debug("S:", service_name, " trans ", s_trans);
-				%debug("D:", services[x], " trans ", d_trans);
+				debug("S:", service_name, " trans ", s_trans);
+				debug("D:", services[x], " trans ", d_trans);
 
 				debug("Skipping ", services[x],
 				      "; restart not needed");


More information about the cluster-commits mailing list