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) {
openSUSE Build Service is sponsored by