From 977a199f73e70d8527a335841a5188bcaaa99477 Mon Sep 17 00:00:00 2001 From: Lon Hohberger <lhh@redhat.com> Date: Thu, 12 Aug 2010 16:28:59 -0400 Subject: [PATCH] rgmanager: Add non-critical flag to resources Resolves: rhbz#605733 Signed-off-by: Lon Hohberger <lhh@redhat.com> --- rgmanager/include/reslist.h | 1 + rgmanager/src/daemons/restree.c | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletions(-) diff --git a/rgmanager/include/reslist.h b/rgmanager/include/reslist.h index 001f56b..b2923ab 100644 --- a/rgmanager/include/reslist.h +++ b/rgmanager/include/reslist.h @@ -46,6 +46,7 @@ resource class if you delete it from the configuration */ #define RF_ENFORCE_TIMEOUTS (1<<9) /** Enforce timeouts for this node */ +#define RF_NON_CRITCIAL (1<<10) /** stop this resource if it fails */ diff --git a/rgmanager/src/daemons/restree.c b/rgmanager/src/daemons/restree.c index 3f07f8f..2462af2 100644 --- a/rgmanager/src/daemons/restree.c +++ b/rgmanager/src/daemons/restree.c @@ -645,8 +645,11 @@ do_load_resource(int ccsfd, char *base, #else if (conf_get(tok, &ref) == 0) { #endif - if (atoi(ref) > 0 || strcasecmp(ref, "yes") == 0) + if (atoi(ref) == 1 || strcasecmp(ref, "yes") == 0) node->rn_flags |= RF_INDEPENDENT; + if (atoi(ref) == 2 || strcasecmp(ref, "non-critical") == 0) { + curres->r_flags |= RF_NON_CRITICAL; + } free(ref); } @@ -693,6 +696,13 @@ do_load_resource(int ccsfd, char *base, curres->r_refs++; + if (curres->r_refs > 1 && + (curres->r_flags & RF_NON_CRITICAL)) { + res_build_name(tok, sizeof(tok), curres); + printf("Non-critical flag for %s is being cleared due to multiple references.\n", tok); + curres->r_flags &= ~RF_NON_CRITICAL; + } + *newnode = node; list_insert(tree, node); @@ -981,6 +991,8 @@ _print_resource_tree(FILE *fp, resource_node_t **tree, int level) fprintf(fp, "DESTROY "); if (node->rn_flags & RF_ENFORCE_TIMEOUTS) fprintf(fp, "ENFORCE-TIMEOUTS "); + if (node->rn_flags & RF_NON_CRITICAL) + fprintf(fp, "NON-CRITICAL "); fprintf(fp, "]"); } fprintf(fp, " {\n"); -- 1.7.2.2