From mboxrd@z Thu Jan 1 00:00:00 1970 From: lhh@sourceware.org Date: 25 Sep 2007 21:09:23 -0000 Subject: [Cluster-devel] cluster/rgmanager ChangeLog src/daemons/restree.c Message-ID: <20070925210923.2712.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-09-25 21:09:23 Modified files: rgmanager : ChangeLog rgmanager/src/daemons: restree.c Log message: Ancillary patch for side case re: #229650 - patch from Simone Gotti. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.31.2.26&r2=1.31.2.27 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/restree.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.23.2.11&r2=1.23.2.12 --- cluster/rgmanager/ChangeLog 2007/08/30 16:03:02 1.31.2.26 +++ cluster/rgmanager/ChangeLog 2007/09/25 21:09:23 1.31.2.27 @@ -1,3 +1,7 @@ +2007-09-25 Lon Hohberger + * src/daemons/restree.c: Apply patch to fix side case re: 229650 + Patch from Simone Gotti. Resolves: #229650 + 2007-08-30 Lon Hohberger * src/daemons/restree.c, rg_state.c: Fix tree-restart bug This is another part of #229650 --- cluster/rgmanager/src/daemons/restree.c 2007/08/30 16:03:03 1.23.2.11 +++ cluster/rgmanager/src/daemons/restree.c 2007/09/25 21:09:23 1.23.2.12 @@ -1242,9 +1242,23 @@ } - if (node->rn_child) - rv |= _res_op_by_level(&node, me?NULL:first, ret, op); + if (node->rn_child) { + rv |= _res_op_by_level(&node, me?NULL:first, ret, op); + /* If one or more child resources are failed and at least one + of them is not an independent subtree then let's check if + if we are an independent subtree. If so, mark ourself + and all our children as failed and return a flag stating + that this section is recoverable apart from siblings in + the resource tree. */ + if (op == RS_STATUS && (rv & SFL_FAILURE) && + (node->rn_flags & RF_INDEPENDENT)) { + mark_nodes(node, RES_FAILED, + RF_NEEDSTART | RF_NEEDSTOP); + rv = SFL_RECOVERABLE; + } + } + /* Stop should occur after children have stopped */ if (me && (op == RS_STOP)) { node->rn_flags &= ~RF_NEEDSTOP;