Gitweb:
http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=10002721407...
Commit: 100027214079bfa1901d8aa37ea8e10d9a60ddd6
Parent: bbefc264a737ce2aac8a0b6e8ed67ba7ea8741e5
Author: Ryan McCabe <rmccabe(a)redhat.com>
AuthorDate: Wed Jan 20 09:33:08 2016 -0500
Committer: Ryan McCabe <rmccabe(a)redhat.com>
CommitterDate: Wed Feb 3 17:28:53 2016 -0500
rgmanager: Don't relocate a service if policy should prevent it
Resolves: rhbz#1197122
Signed-off-by: Ryan McCabe <rmccabe(a)redhat.com>
---
rgmanager/src/daemons/rg_state.c | 15 ++++++++++++++-
1 files changed, 14 insertions(+), 1 deletions(-)
diff --git a/rgmanager/src/daemons/rg_state.c b/rgmanager/src/daemons/rg_state.c
index 2332ad8..fe5d99d 100644
--- a/rgmanager/src/daemons/rg_state.c
+++ b/rgmanager/src/daemons/rg_state.c
@@ -1413,6 +1413,9 @@ _svc_stop(const char *svcName, int req, int recover, uint32_t
newstate)
logt_print(LOG_ERR, "#52: Failed changing RG status\n");
return RG_EFAIL;
}
+
+ rg_unlock(&lockp);
+ return RG_ESUCCESS;
}
logt_print(LOG_NOTICE, "Stopping service %s\n", svcName);
@@ -2065,6 +2068,7 @@ handle_start_req(char *svcName, int req, int *new_owner)
int ret, tolerance = FOD_BEST;
cluster_member_list_t *membership;
int need_check, actual_failure = 0;
+ char policy[20];
/* When we get an enable req. for a migratory service,
check other nodes to see if they are already running
@@ -2160,8 +2164,17 @@ handle_start_req(char *svcName, int req, int *new_owner)
relocate:
/*
* OK, it failed to start - but succeeded to stop. Now,
- * we should relocate the service.
+ * we should relocate the service, unless the policy
+ * calls for it to be disabled.
*/
+ get_recovery_policy(svcName, policy, sizeof(policy));
+ if (strstr(policy, "disable")) {
+ logt_print(LOG_NOTICE,
+ "Starting service %s failed; disabling "
+ "due to recovery policy\n", svcName);
+ return svc_disable(svcName);
+ }
+
if (actual_failure)
logt_print(LOG_WARNING, "#71: Relocating failed service %s\n",
svcName);