|
|
60de42 |
From 93af2f90fd6687c892c9580b5b6dbedb3a6fb6f7 Mon Sep 17 00:00:00 2001
|
|
|
60de42 |
From: Andrew Beekhof <andrew@beekhof.net>
|
|
|
60de42 |
Date: Fri, 4 Nov 2016 14:08:23 +1100
|
|
|
60de42 |
Subject: [PATCH] Fix: Improve recovery when demote fails with OCF_NOT_RUNNING
|
|
|
60de42 |
|
|
|
60de42 |
If combined with on-fail=restart, this patch allows the resource to
|
|
|
60de42 |
stop+start+promote in a single transition.
|
|
|
60de42 |
|
|
|
60de42 |
Related: rhbz#1391671
|
|
|
60de42 |
---
|
|
|
60de42 |
lib/pengine/unpack.c | 9 +++++++--
|
|
|
60de42 |
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
|
60de42 |
|
|
|
60de42 |
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
|
|
|
60de42 |
index a4d6845..2b5bdf6 100644
|
|
|
60de42 |
--- a/lib/pengine/unpack.c
|
|
|
60de42 |
+++ b/lib/pengine/unpack.c
|
|
|
60de42 |
@@ -2640,13 +2640,17 @@ unpack_rsc_op_failure(resource_t * rsc, node_t * node, int rc, xmlNode * xml_op,
|
|
|
60de42 |
* setting role=slave is not dangerous because no master will be
|
|
|
60de42 |
* promoted until the failed resource has been fully stopped
|
|
|
60de42 |
*/
|
|
|
60de42 |
- rsc->next_role = RSC_ROLE_STOPPED;
|
|
|
60de42 |
if (action->on_fail == action_fail_block) {
|
|
|
60de42 |
rsc->role = RSC_ROLE_MASTER;
|
|
|
60de42 |
+ rsc->next_role = RSC_ROLE_STOPPED;
|
|
|
60de42 |
+
|
|
|
60de42 |
+ } else if(rc == PCMK_OCF_NOT_RUNNING) {
|
|
|
60de42 |
+ rsc->role = RSC_ROLE_STOPPED;
|
|
|
60de42 |
|
|
|
60de42 |
} else {
|
|
|
60de42 |
crm_warn("Forcing %s to stop after a failed demote action", rsc->id);
|
|
|
60de42 |
rsc->role = RSC_ROLE_SLAVE;
|
|
|
60de42 |
+ rsc->next_role = RSC_ROLE_STOPPED;
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
} else if (compare_version("2.0", op_version) > 0 && safe_str_eq(task, CRMD_ACTION_START)) {
|
|
|
60de42 |
@@ -3051,6 +3055,7 @@ update_resource_state(resource_t * rsc, node_t * node, xmlNode * xml_op, const c
|
|
|
60de42 |
}
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
+
|
|
|
60de42 |
gboolean
|
|
|
60de42 |
unpack_rsc_op(resource_t * rsc, node_t * node, xmlNode * xml_op, xmlNode ** last_failure,
|
|
|
60de42 |
enum action_fail_response * on_fail, pe_working_set_t * data_set)
|
|
|
60de42 |
@@ -3265,7 +3270,7 @@ unpack_rsc_op(resource_t * rsc, node_t * node, xmlNode * xml_op, xmlNode ** last
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
done:
|
|
|
60de42 |
- pe_rsc_trace(rsc, "Resource %s after %s: role=%s", rsc->id, task, role2text(rsc->role));
|
|
|
60de42 |
+ pe_rsc_trace(rsc, "Resource %s after %s: role=%s, next=%s", rsc->id, task, role2text(rsc->role), role2text(rsc->next_role));
|
|
|
60de42 |
return TRUE;
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
--
|
|
|
60de42 |
1.8.3.1
|
|
|
60de42 |
|