Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > media > main-src > by-pkgid > e536fc0c6270ec1d92a0fd41bb1f8360 > files > 122

rgmanager-2.0.52-28.el5_8.2.src.rpm

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