Skip to content

Commit 2a1847e

Browse files
committed
Merge branch '1.1' of github.com:ClusterLabs/pacemaker into 1.1
2 parents 26180cd + a0449d4 commit 2a1847e

10 files changed

+233
-11
lines changed

fencing/remote.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,10 +278,12 @@ remote_op_done(remote_fencing_op_t * op, xmlNode * data, int rc, int dup)
278278
goto remote_op_done_cleanup;
279279
}
280280

281-
if (!op->delegate && data) {
281+
if (!op->delegate && data && rc != -ENODEV && rc != -EHOSTUNREACH) {
282282
xmlNode *ndata = get_xpath_object("//@" F_STONITH_DELEGATE, data, LOG_TRACE);
283283
if(ndata) {
284284
op->delegate = crm_element_value_copy(ndata, F_STONITH_DELEGATE);
285+
} else {
286+
op->delegate = crm_element_value_copy(data, F_ORIG);
285287
}
286288
}
287289

lib/cib/cib_utils.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ cib_perform_op(const char *op, int call_options, cib_op_t * fn, gboolean is_quer
531531
int current_schema = get_schema_version(schema);
532532

533533
if (minimum_schema == 0) {
534-
minimum_schema = get_schema_version("pacemaker-1.1");
534+
minimum_schema = get_schema_version("pacemaker-1.2");
535535
}
536536

537537
/* Does the CIB support the "update-*" attributes... */

lib/common/xml.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3416,7 +3416,7 @@ dump_xml_attr(xmlAttrPtr attr, int options, char **buffer, int *offset, int *max
34163416
}
34173417

34183418
p = attr->_private;
3419-
if (is_set(p->flags, xpf_deleted)) {
3419+
if (p && is_set(p->flags, xpf_deleted)) {
34203420
return;
34213421
}
34223422

@@ -4552,6 +4552,8 @@ subtract_xml_object(xmlNode * parent, xmlNode * left, xmlNode * right,
45524552
/* changes to name/value pairs */
45534553
for (xIter = crm_first_attr(left); xIter != NULL; xIter = xIter->next) {
45544554
const char *prop_name = (const char *)xIter->name;
4555+
xmlAttrPtr right_attr = NULL;
4556+
xml_private_t *p = NULL;
45554557

45564558
if (strcmp(prop_name, XML_ATTR_ID) == 0) {
45574559
continue;
@@ -4570,8 +4572,13 @@ subtract_xml_object(xmlNode * parent, xmlNode * left, xmlNode * right,
45704572
continue;
45714573
}
45724574

4575+
right_attr = xmlHasProp(right, (const xmlChar *)prop_name);
4576+
if (right_attr) {
4577+
p = right_attr->_private;
4578+
}
4579+
45734580
right_val = crm_element_value(right, prop_name);
4574-
if (right_val == NULL) {
4581+
if (right_val == NULL || (p && is_set(p->flags, xpf_deleted))) {
45754582
/* new */
45764583
*changed = TRUE;
45774584
if (full) {

pengine/regression.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,8 @@ do_test colocated-utilization-primitive-2 "Colocated Utilization - Choose the mo
564564
do_test colocated-utilization-group "Colocated Utilization - Group"
565565
do_test colocated-utilization-clone "Colocated Utilization - Clone"
566566

567+
do_test utilization-check-allowed-nodes "Only check the capacities of the nodes that can run the resource"
568+
567569
echo ""
568570
do_test reprobe-target_rc "Ensure correct target_rc for reprobe of inactive resources"
569571
do_test node-maintenance-1 "cl#5128 - Node maintenance"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
digraph "g" {
2+
"load_stopped_node1 node1" [ style=bold color="green" fontcolor="orange"]
3+
"load_stopped_node2 node2" [ style=bold color="green" fontcolor="orange"]
4+
"probe_complete node1" -> "probe_complete" [ style = bold]
5+
"probe_complete node1" [ style=bold color="green" fontcolor="black"]
6+
"probe_complete node2" -> "probe_complete" [ style = bold]
7+
"probe_complete node2" [ style=bold color="green" fontcolor="black"]
8+
"probe_complete" -> "rsc1_start_0 node2" [ style = bold]
9+
"probe_complete" [ style=bold color="green" fontcolor="orange"]
10+
"rsc1_monitor_0 node1" -> "probe_complete node1" [ style = bold]
11+
"rsc1_monitor_0 node1" [ style=bold color="green" fontcolor="black"]
12+
"rsc1_monitor_0 node2" -> "probe_complete node2" [ style = bold]
13+
"rsc1_monitor_0 node2" [ style=bold color="green" fontcolor="black"]
14+
"rsc1_start_0 node2" [ style=bold color="green" fontcolor="black"]
15+
"rsc2_monitor_0 node1" -> "probe_complete node1" [ style = bold]
16+
"rsc2_monitor_0 node1" [ style=bold color="green" fontcolor="black"]
17+
"rsc2_monitor_0 node2" -> "probe_complete node2" [ style = bold]
18+
"rsc2_monitor_0 node2" [ style=bold color="green" fontcolor="black"]
19+
}
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY" transition_id="0">
2+
<synapse id="0">
3+
<action_set>
4+
<rsc_op id="11" operation="start" operation_key="rsc1_start_0" on_node="node2" on_node_uuid="node2">
5+
<primitive id="rsc1" class="ocf" provider="pacemaker" type="Dummy"/>
6+
<attributes CRM_meta_timeout="20000" />
7+
</rsc_op>
8+
</action_set>
9+
<inputs>
10+
<trigger>
11+
<pseudo_event id="4" operation="probe_complete" operation_key="probe_complete"/>
12+
</trigger>
13+
</inputs>
14+
</synapse>
15+
<synapse id="1">
16+
<action_set>
17+
<rsc_op id="9" operation="monitor" operation_key="rsc1_monitor_0" on_node="node2" on_node_uuid="node2">
18+
<primitive id="rsc1" class="ocf" provider="pacemaker" type="Dummy"/>
19+
<attributes CRM_meta_op_target_rc="7" CRM_meta_timeout="20000" />
20+
</rsc_op>
21+
</action_set>
22+
<inputs/>
23+
</synapse>
24+
<synapse id="2">
25+
<action_set>
26+
<rsc_op id="6" operation="monitor" operation_key="rsc1_monitor_0" on_node="node1" on_node_uuid="node1">
27+
<primitive id="rsc1" class="ocf" provider="pacemaker" type="Dummy"/>
28+
<attributes CRM_meta_op_target_rc="7" CRM_meta_timeout="20000" />
29+
</rsc_op>
30+
</action_set>
31+
<inputs/>
32+
</synapse>
33+
<synapse id="3">
34+
<action_set>
35+
<rsc_op id="10" operation="monitor" operation_key="rsc2_monitor_0" on_node="node2" on_node_uuid="node2">
36+
<primitive id="rsc2" class="ocf" provider="pacemaker" type="Dummy"/>
37+
<attributes CRM_meta_op_target_rc="7" CRM_meta_timeout="20000" />
38+
</rsc_op>
39+
</action_set>
40+
<inputs/>
41+
</synapse>
42+
<synapse id="4">
43+
<action_set>
44+
<rsc_op id="7" operation="monitor" operation_key="rsc2_monitor_0" on_node="node1" on_node_uuid="node1">
45+
<primitive id="rsc2" class="ocf" provider="pacemaker" type="Dummy"/>
46+
<attributes CRM_meta_op_target_rc="7" CRM_meta_timeout="20000" />
47+
</rsc_op>
48+
</action_set>
49+
<inputs/>
50+
</synapse>
51+
<synapse id="5" priority="1000000">
52+
<action_set>
53+
<rsc_op id="8" operation="probe_complete" operation_key="probe_complete-node2" on_node="node2" on_node_uuid="node2">
54+
<attributes CRM_meta_op_no_wait="true" />
55+
</rsc_op>
56+
</action_set>
57+
<inputs>
58+
<trigger>
59+
<rsc_op id="9" operation="monitor" operation_key="rsc1_monitor_0" on_node="node2" on_node_uuid="node2"/>
60+
</trigger>
61+
<trigger>
62+
<rsc_op id="10" operation="monitor" operation_key="rsc2_monitor_0" on_node="node2" on_node_uuid="node2"/>
63+
</trigger>
64+
</inputs>
65+
</synapse>
66+
<synapse id="6" priority="1000000">
67+
<action_set>
68+
<rsc_op id="5" operation="probe_complete" operation_key="probe_complete-node1" on_node="node1" on_node_uuid="node1">
69+
<attributes CRM_meta_op_no_wait="true" />
70+
</rsc_op>
71+
</action_set>
72+
<inputs>
73+
<trigger>
74+
<rsc_op id="6" operation="monitor" operation_key="rsc1_monitor_0" on_node="node1" on_node_uuid="node1"/>
75+
</trigger>
76+
<trigger>
77+
<rsc_op id="7" operation="monitor" operation_key="rsc2_monitor_0" on_node="node1" on_node_uuid="node1"/>
78+
</trigger>
79+
</inputs>
80+
</synapse>
81+
<synapse id="7">
82+
<action_set>
83+
<pseudo_event id="4" operation="probe_complete" operation_key="probe_complete">
84+
<attributes />
85+
</pseudo_event>
86+
</action_set>
87+
<inputs>
88+
<trigger>
89+
<rsc_op id="5" operation="probe_complete" operation_key="probe_complete-node1" on_node="node1" on_node_uuid="node1"/>
90+
</trigger>
91+
<trigger>
92+
<rsc_op id="8" operation="probe_complete" operation_key="probe_complete-node2" on_node="node2" on_node_uuid="node2"/>
93+
</trigger>
94+
</inputs>
95+
</synapse>
96+
<synapse id="8">
97+
<action_set>
98+
<pseudo_event id="3" operation="load_stopped_node1" operation_key="load_stopped_node1">
99+
<attributes />
100+
</pseudo_event>
101+
</action_set>
102+
<inputs/>
103+
</synapse>
104+
<synapse id="9">
105+
<action_set>
106+
<pseudo_event id="2" operation="load_stopped_node2" operation_key="load_stopped_node2">
107+
<attributes />
108+
</pseudo_event>
109+
</action_set>
110+
<inputs/>
111+
</synapse>
112+
</transition_graph>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Allocation scores:
2+
native_color: rsc1 allocation score on node1: -INFINITY
3+
native_color: rsc1 allocation score on node2: 0
4+
native_color: rsc2 allocation score on node1: -INFINITY
5+
native_color: rsc2 allocation score on node2: 0
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
2+
Current cluster status:
3+
Online: [ node1 node2 ]
4+
5+
rsc1 (ocf::pacemaker:Dummy): Stopped
6+
rsc2 (ocf::pacemaker:Dummy): Stopped
7+
8+
Transition Summary:
9+
* Start rsc1 (node2)
10+
11+
Executing cluster transition:
12+
* Resource action: rsc1 monitor on node2
13+
* Resource action: rsc1 monitor on node1
14+
* Resource action: rsc2 monitor on node2
15+
* Resource action: rsc2 monitor on node1
16+
* Pseudo action: probe_complete
17+
* Pseudo action: load_stopped_node1
18+
* Pseudo action: load_stopped_node2
19+
* Resource action: rsc1 start on node2
20+
21+
Revised cluster status:
22+
Online: [ node1 node2 ]
23+
24+
rsc1 (ocf::pacemaker:Dummy): Started node2
25+
rsc2 (ocf::pacemaker:Dummy): Stopped
26+
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<cib epoch="1" num_updates="36" admin_epoch="0" validate-with="pacemaker-1.2" cib-last-written="Fri Dec 7 15:42:31 2012" have-quorum="1">
2+
<configuration>
3+
<crm_config>
4+
<cluster_property_set id="cib-bootstrap-options">
5+
<nvpair id="cib-bootstrap-options-stonith-enabled" name="stonith-enabled" value="false"/>
6+
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
7+
<nvpair id="cib-bootstrap-options-placement-strategy" name="placement-strategy" value="utilization"/>
8+
</cluster_property_set>
9+
</crm_config>
10+
<nodes>
11+
<node id="node1" uname="node1">
12+
<utilization id="node1-utlization">
13+
<nvpair id="node1-utlization-cpu" name="cpu" value="4"/>
14+
</utilization>
15+
</node>
16+
<node id="node2" uname="node2">
17+
<utilization id="node2-utlization">
18+
<nvpair id="node2-utlization-cpu" name="cpu" value="2"/>
19+
</utilization>
20+
</node>
21+
</nodes>
22+
<resources>
23+
<primitive id="rsc1" class="ocf" provider="pacemaker" type="Dummy"/>
24+
<primitive id="rsc2" class="ocf" provider="pacemaker" type="Dummy">
25+
<utilization id="rsc2-utlization">
26+
<nvpair id="rsc2-utlization-cpu" name="cpu" value="4"/>
27+
</utilization>
28+
</primitive>
29+
</resources>
30+
<constraints>
31+
<rsc_location id="rsc1-location" rsc="rsc1" node="node1" score="-INFINITY"/>
32+
<rsc_colocation id="rsc2-with-rsc1" rsc="rsc2" with-rsc="rsc1" score="INFINITY"/>
33+
</constraints>
34+
</configuration>
35+
<status>
36+
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate"/>
37+
<node_state id="node2" uname="node2" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate"/>
38+
</status>
39+
</cib>

pengine/utilization.c

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -344,9 +344,10 @@ process_utilization(resource_t * rsc, node_t ** prefer, pe_working_set_t * data_
344344
int alloc_details = scores_log_level + 1;
345345

346346
if (safe_str_neq(data_set->placement_strategy, "default")) {
347-
GListPtr gIter = NULL;
347+
GHashTableIter iter;
348348
GListPtr colocated_rscs = NULL;
349349
gboolean any_capable = FALSE;
350+
node_t *node = NULL;
350351

351352
colocated_rscs = find_colocated_rscs(colocated_rscs, rsc, rsc);
352353
if (colocated_rscs) {
@@ -356,8 +357,11 @@ process_utilization(resource_t * rsc, node_t ** prefer, pe_working_set_t * data_
356357

357358
unallocated_utilization = sum_unallocated_utilization(rsc, colocated_rscs);
358359

359-
for (gIter = data_set->nodes; gIter != NULL; gIter = gIter->next) {
360-
node_t *node = (node_t *) gIter->data;
360+
g_hash_table_iter_init(&iter, rsc->allowed_nodes);
361+
while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) {
362+
if (can_run_resources(node) == FALSE || node->weight < 0) {
363+
continue;
364+
}
361365

362366
if (have_enough_capacity(node, rscs_id, unallocated_utilization)) {
363367
any_capable = TRUE;
@@ -371,8 +375,11 @@ process_utilization(resource_t * rsc, node_t ** prefer, pe_working_set_t * data_
371375
}
372376

373377
if (any_capable) {
374-
for (gIter = data_set->nodes; gIter != NULL; gIter = gIter->next) {
375-
node_t *node = (node_t *) gIter->data;
378+
g_hash_table_iter_init(&iter, rsc->allowed_nodes);
379+
while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) {
380+
if (can_run_resources(node) == FALSE || node->weight < 0) {
381+
continue;
382+
}
376383

377384
if (have_enough_capacity(node, rscs_id, unallocated_utilization) == FALSE) {
378385
pe_rsc_debug(rsc, "Resource %s and its colocated resources cannot be allocated to node %s: no enough capacity",
@@ -394,8 +401,11 @@ process_utilization(resource_t * rsc, node_t ** prefer, pe_working_set_t * data_
394401
}
395402

396403
if (any_capable == FALSE) {
397-
for (gIter = data_set->nodes; gIter != NULL; gIter = gIter->next) {
398-
node_t *node = (node_t *) gIter->data;
404+
g_hash_table_iter_init(&iter, rsc->allowed_nodes);
405+
while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) {
406+
if (can_run_resources(node) == FALSE || node->weight < 0) {
407+
continue;
408+
}
399409

400410
if (have_enough_capacity(node, rsc->id, rsc->utilization) == FALSE) {
401411
pe_rsc_debug(rsc, "Resource %s cannot be allocated to node %s: no enough capacity",

0 commit comments

Comments
 (0)