File pacemaker-pengine-exclude-resources-and-nodes-from-symmetric_default.patch of Package pacemaker.8397
commit cacbac0677bb5285f16bdb16272dbbe02a7984d2
Author: Andrew Beekhof <andrew@beekhof.net>
Date: Mon Oct 23 12:06:46 2017 +1100
Fix: PE: Exclude resources and nodes from the symmetric_default constraint in some circumstances
This is particularly relevant to bundles where only specific nodes
are allowed to a particular resource. Previously, even if we set the
tuple up correctly during container_unpack(), common_unpack() would
re-add the full node set afterwards recursively via the parent.
Similarly, the bundle "nodes" are not eligable for running any other
resource than the one container_unpack() assigned it and there is no
reason to add it to their allowed_nodes list.
Keeping the allowed_nodes list concise also ensures crm_resource
--cleanup does the bare minimum necessary when the resource is in an
unknown state.
Index: pacemaker-1.1.16+20170320.77ea74d/lib/pengine/utils.c
===================================================================
--- pacemaker-1.1.16+20170320.77ea74d.orig/lib/pengine/utils.c
+++ pacemaker-1.1.16+20170320.77ea74d/lib/pengine/utils.c
@@ -1323,7 +1323,21 @@ resource_node_score(resource_t * rsc, no
{
node_t *match = NULL;
- if (rsc->children) {
+ if(rsc->exclusive_discover && safe_str_eq(tag, "symmetric_default")) {
+ /* A terrible implementation via string comparision but
+ * exclusive resources should not have the symmetric_default
+ * constraint applied to them.
+ */
+ return;
+
+ } else if(node->rsc_discover_mode == 1 && safe_str_eq(tag, "symmetric_default")) {
+ /* Another terrible implementation via string comparision but
+ * exclusive node should also not be included in the
+ * symmetric_default constraint.
+ */
+ return;
+
+ } else if (rsc->children) {
GListPtr gIter = rsc->children;
for (; gIter != NULL; gIter = gIter->next) {