Skip to content

Commit 991652d

Browse files
committed
Refactor: libpe_status: New rsc_managed_recursive()
Signed-off-by: Reid Wahl <nrwahl@protonmail.com>
1 parent 501e749 commit 991652d

1 file changed

Lines changed: 30 additions & 2 deletions

File tree

lib/pengine/clone.c

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,35 @@ configured_role(pcmk_resource_t *rsc)
514514
return role;
515515
}
516516

517+
/*!
518+
* \internal
519+
* \brief Check whether a resource and all of its descendants are managed
520+
*
521+
* \param[in] rsc Resource
522+
*
523+
* \return \c true if \p rsc and all of its descendants are managed, or \c false
524+
* otherwise
525+
*/
526+
static bool
527+
rsc_managed_recursive(const pcmk_resource_t *rsc)
528+
{
529+
if (!pcmk__is_set(rsc->flags, pcmk__rsc_managed)) {
530+
return false;
531+
}
532+
533+
for (const GList *iter = rsc->priv->children; iter != NULL;
534+
iter = iter->next) {
535+
536+
const pcmk_resource_t *child_rsc = iter->data;
537+
538+
if (!rsc_managed_recursive(child_rsc)) {
539+
return false;
540+
}
541+
}
542+
543+
return true;
544+
}
545+
517546
bool
518547
pcmk__is_set_recursive(const pcmk_resource_t *rsc, uint64_t flag, bool any)
519548
{
@@ -716,8 +745,7 @@ pe__clone_default(pcmk__output_t *out, va_list args)
716745
}
717746

718747
} else if (pcmk__is_set_recursive(child_rsc, pcmk__rsc_removed, true)
719-
|| !pcmk__is_set_recursive(child_rsc, pcmk__rsc_managed,
720-
false)
748+
|| !rsc_managed_recursive(child_rsc)
721749
|| pcmk__is_set_recursive(child_rsc, pcmk__rsc_failed,
722750
true)) {
723751

0 commit comments

Comments
 (0)