[Pacemaker] Can't failover Master/Slave with group(primitive x3) setting

Andrew Beekhof andrew at beekhof.net
Fri Oct 7 03:50:43 UTC 2011


On Fri, Oct 7, 2011 at 2:21 PM, Andrew Beekhof <andrew at beekhof.net> wrote:
> On Fri, Oct 7, 2011 at 11:39 AM, Andrew Beekhof <andrew at beekhof.net> wrote:
>> On Fri, Sep 30, 2011 at 3:44 PM, Junko IKEDA <tsukishima.ha at gmail.com> wrote:
>>> Hi,
>>>
>>> sorry for the confusion.
>>>
>>> Pacemaker 1.0.10 OK(group resource can failover)
>>> Pacemaker 1.0.11 NG(gruop resource just stop, can not failover)
>>> Pacemaker 1.1 <- the latest hg (gruop resource just stop, can not failover)
>>
>> We've actually moved over 1.1 to git:
>>   http://www.clusterlabs.org/wiki/Contributing_Patches
>>
>> I should mark that somehow in the HG tree.
>>
>>>
>>> By the way, your simulation showed dummy01 restart on bl460g1n13 again,
>>> but dummy01 failed on bl460g1n13, so dummy01 should move to bl460g1n14.
>>
>> Hmmm. True.  I'll take another look.
>
> Getting this and coloc-clone-stays-active to behave at the same time
> is proving a challenge :-(
>

I'm not 100% sure I like this patch but could you see how it behaves
in your testing?


diff --git a/pengine/native.c b/pengine/native.c
index 52f6f0f..8718abb 100644
--- a/pengine/native.c
+++ b/pengine/native.c
@@ -26,6 +26,7 @@
 #include <utils.h>

 #define DELETE_THEN_REFRESH 1   /* The crmd will remove the resource
from the CIB itself, making this redundant */
+#define INFINITY_HACK   (INFINITY * -100)

 #define VARIANT_NATIVE 1
 #include <lib/pengine/variant.h>
@@ -287,8 +288,12 @@ node_hash_update(GHashTable * list1, GHashTable *
list2, const char *attr, int f
             crm_trace("%s: Filtering %d + %d*%d (factor * score)",
                       node->details->uname, node->weight, factor, score);

+        } else if (node->weight == INFINITY_HACK) {
+            crm_trace("%s: Filtering %d + %d*%d (node < 0)",
+                      node->details->uname, node->weight, factor, score);
+
         } else if (only_positive && new_score < 0 && node->weight > 0) {
-            node->weight = 1;
+            node->weight = INFINITY_HACK;
             crm_trace("%s: Filtering %d + %d*%d (score > 0)",
                       node->details->uname, node->weight, factor, score);

@@ -300,7 +305,6 @@ node_hash_update(GHashTable * list1, GHashTable *
list2, const char *attr, int f
             crm_trace("%s: %d + %d*%d", node->details->uname,
node->weight, factor, score);
             node->weight = new_score;
         }
-
     }
 }

@@ -405,6 +409,17 @@ rsc_merge_weights(resource_t * rsc, const char
*rhs, GHashTable * nodes, const c

     }

+    if(is_set(flags, pe_weights_positive)) {
+        node_t *node = NULL;
+        GHashTableIter iter;
+        g_hash_table_iter_init(&iter, work);
+        while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) {
+            if (node->weight == INFINITY_HACK) {
+                node->weight = 1;
+            }
+        }
+    }
+
     if (nodes) {
         g_hash_table_destroy(nodes);
     }




More information about the Pacemaker mailing list