From mboxrd@z Thu Jan 1 00:00:00 1970 From: lhh@sourceware.org Date: 30 Aug 2007 16:03:03 -0000 Subject: [Cluster-devel] cluster/rgmanager ChangeLog src/daemons/restre ... Message-ID: <20070830160303.21100.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh at sourceware.org 2007-08-30 16:03:03 Modified files: rgmanager : ChangeLog rgmanager/src/daemons: restree.c rg_state.c Log message: Fix #229650, pass 3 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.31.2.25&r2=1.31.2.26 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/restree.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.23.2.10&r2=1.23.2.11 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.24.2.12&r2=1.24.2.13 --- cluster/rgmanager/ChangeLog 2007/08/15 18:41:10 1.31.2.25 +++ cluster/rgmanager/ChangeLog 2007/08/30 16:03:02 1.31.2.26 @@ -1,3 +1,7 @@ +2007-08-30 Lon Hohberger + * src/daemons/restree.c, rg_state.c: Fix tree-restart bug + This is another part of #229650 + 2007-08-15 Lon Hohberger * src/utils/clustat.c: Remove uninitialized var & fix logic / spotted by Ryan McCabe --- cluster/rgmanager/src/daemons/restree.c 2007/08/02 14:46:51 1.23.2.10 +++ cluster/rgmanager/src/daemons/restree.c 2007/08/30 16:03:03 1.23.2.11 @@ -954,20 +954,17 @@ return _res_op(&node->rn_child, first, NULL, ret, op); if (op == RS_START || op == RS_STATUS) { - rv = _do_child_levels(tree, first, ret, op); + rv |= _do_child_levels(tree, first, ret, op); if (rv & SFL_FAILURE) return rv; /* Start default level after specified ones */ - rv = _do_child_default_level(tree, first, ret, op); + rv |= _do_child_default_level(tree, first, ret, op); } /* stop */ else { - rv = _do_child_default_level(tree, first, ret, op); - if (rv != 0) - return rv; - - rv = _do_child_levels(tree, first, ret, op); + rv |= _do_child_default_level(tree, first, ret, op); + rv |= _do_child_levels(tree, first, ret, op); } return rv; @@ -1245,22 +1242,8 @@ } - if (node->rn_child) { - rv = _res_op_by_level(&node, me?NULL:first, ret, op); - if (rv != 0) { - mark_nodes(node, RES_FAILED, - RF_NEEDSTART | RF_NEEDSTOP); - - /* If this node is independent of its siblings, - that one of its dependent children failed - does not matter: its dependent children must - also be independent of this node's siblings. */ - if (node->rn_flags & RF_INDEPENDENT) - return SFL_RECOVERABLE; - - return SFL_FAILURE; - } - } + if (node->rn_child) + rv |= _res_op_by_level(&node, me?NULL:first, ret, op); /* Stop should occur after children have stopped */ if (me && (op == RS_STOP)) { --- cluster/rgmanager/src/daemons/rg_state.c 2007/08/02 14:46:51 1.24.2.12 +++ cluster/rgmanager/src/daemons/rg_state.c 2007/08/30 16:03:03 1.24.2.13 @@ -1130,10 +1130,13 @@ static inline int handle_started_status(char *svcName, int ret, rg_state_t *svcStatus) { + int newowner; + if (ret & SFL_FAILURE) { - ret = msvc_check_cluster(svcName); - if (ret >= 0) - return 1; + newowner = msvc_check_cluster(svcName); + if (newowner >= 0) + return 0; /* running but not here */ + return ret; /* not running anymore */ } /* Ok, we have a recoverable service. Try to perform