From mboxrd@z Thu Jan 1 00:00:00 1970 From: lhh@sourceware.org Date: 30 Aug 2007 16:05:15 -0000 Subject: [Cluster-devel] cluster/rgmanager ChangeLog src/daemons/restre ... Message-ID: <20070830160515.21747.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: RHEL51 Changes by: lhh at sourceware.org 2007-08-30 16:05:14 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=RHEL51&r1=1.31.2.19.2.3&r2=1.31.2.19.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/restree.c.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.23.2.8.2.2&r2=1.23.2.8.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.24.2.10.2.2&r2=1.24.2.10.2.3 --- cluster/rgmanager/ChangeLog 2007/08/02 14:47:45 1.31.2.19.2.3 +++ cluster/rgmanager/ChangeLog 2007/08/30 16:05:14 1.31.2.19.2.4 @@ -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-02 Lon Hohberger * general: More fixes around #248727 * include/reslist.h, src/daemons/restree.c: Make last-value be --- cluster/rgmanager/src/daemons/restree.c 2007/08/02 14:47:45 1.23.2.8.2.2 +++ cluster/rgmanager/src/daemons/restree.c 2007/08/30 16:05:14 1.23.2.8.2.3 @@ -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:47:45 1.24.2.10.2.2 +++ cluster/rgmanager/src/daemons/rg_state.c 2007/08/30 16:05:14 1.24.2.10.2.3 @@ -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