[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