From mboxrd@z Thu Jan 1 00:00:00 1970 From: lhh@sourceware.org Date: 25 Sep 2007 21:06:15 -0000 Subject: [Cluster-devel] cluster/rgmanager ChangeLog src/daemons/restree.c Message-ID: <20070925210615.25803.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-09-25 21:06:15 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=RHEL51&r1=1.31.2.19.2.4&r2=1.31.2.19.2.5 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.3&r2=1.23.2.8.2.4 --- cluster/rgmanager/ChangeLog 2007/08/30 16:05:14 1.31.2.19.2.4 +++ cluster/rgmanager/ChangeLog 2007/09/25 21:06:15 1.31.2.19.2.5 @@ -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:05:14 1.23.2.8.2.3 +++ cluster/rgmanager/src/daemons/restree.c 2007/09/25 21:06:15 1.23.2.8.2.4 @@ -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;