commit 5566c3e6b194cbe682408ef9c88ad3b6a9755f7d
Author: Andrew Beekhof <andrew@beekhof.net>
Date: Wed Apr 9 12:07:46 2014 +1000
Fix: PE: Ensure unfencing occurs before fencing devices are (re-)probed
(cherry picked from commit 6be22945726c204b9c73da843bb04981e46126be)
Conflicts:
pengine/test10/unfence-startup.summary
diff --git a/lib/pengine/utils.c b/lib/pengine/utils.c
index e84d341..9cb744a 100644
--- a/lib/pengine/utils.c
+++ b/lib/pengine/utils.c
@@ -1881,7 +1881,7 @@ trigger_unfencing(
action_t *unfence = pe_fence_op(node, "on", FALSE, data_set);
crm_notice("Unfencing %s: %s", node->details->uname, reason);
- if(FALSE && dependancy) {
+ if(dependancy) {
order_actions(unfence, dependancy, pe_order_optional);
}
diff --git a/pengine/native.c b/pengine/native.c
index 3d75dc9..5c723c2 100644
--- a/pengine/native.c
+++ b/pengine/native.c
@@ -2518,8 +2518,21 @@ native_create_probe(resource_t * rsc, node_t * node, action_t * complete,
}
pe_rsc_debug(rsc, "Probing %s on %s (%s)", rsc->id, node->details->uname, role2text(rsc->role));
- order_actions(probe, complete, pe_order_implies_then);
+ if(is_set(rsc->flags, pe_rsc_fence_device) && is_set(data_set->flags, pe_flag_enable_unfencing)) {
+ /* Normally rsc.start depends on probe complete which depends
+ * on rsc.probe. But this can't be the case in this scenario as
+ * it would create graph loops.
+ *
+ * So instead we explicitly order 'rsc.probe then rsc.start'
+ */
+ custom_action_order(rsc, NULL, probe,
+ rsc, generate_op_key(rsc->id, RSC_START, 0), NULL,
+ pe_order_optional, data_set);
+
+ } else {
+ order_actions(probe, complete, pe_order_implies_then);
+ }
return TRUE;
}
diff --git a/pengine/test10/unfence-definition.dot b/pengine/test10/unfence-definition.dot
index e737687..6ab0e28 100644
--- a/pengine/test10/unfence-definition.dot
+++ b/pengine/test10/unfence-definition.dot
@@ -61,7 +61,7 @@ digraph "g" {
"dlm_stop_0 virt-1" [ style=bold color="green" fontcolor="black"]
"fencing_delete_0 virt-1" -> "fencing_start_0 virt-1" [ style = bold]
"fencing_delete_0 virt-1" [ style=bold color="green" fontcolor="black"]
-"fencing_monitor_0 virt-3" -> "probe_complete virt-3" [ style = bold]
+"fencing_monitor_0 virt-3" -> "fencing_start_0 virt-1" [ style = bold]
"fencing_monitor_0 virt-3" [ style=bold color="green" fontcolor="black"]
"fencing_start_0 virt-1" [ style=bold color="green" fontcolor="black"]
"fencing_stop_0 virt-1" -> "all_stopped" [ style = bold]
@@ -89,6 +89,7 @@ digraph "g" {
"stonith 'on' virt-1" [ style=bold color="green" fontcolor="black"]
"stonith 'on' virt-3" -> "clvmd-clone_start_0" [ style = bold]
"stonith 'on' virt-3" -> "dlm-clone_start_0" [ style = bold]
+"stonith 'on' virt-3" -> "fencing_monitor_0 virt-3" [ style = bold]
"stonith 'on' virt-3" [ style=bold color="green" fontcolor="black"]
"stonith 'reboot' virt-4" -> "stonith_complete" [ style = bold]
"stonith 'reboot' virt-4" [ style=bold color="green" fontcolor="black"]
diff --git a/pengine/test10/unfence-definition.exp b/pengine/test10/unfence-definition.exp
index 9075347..0f779da 100644
--- a/pengine/test10/unfence-definition.exp
+++ b/pengine/test10/unfence-definition.exp
@@ -19,6 +19,9 @@
<trigger>
<pseudo_event id="8" operation="probe_complete" operation_key="probe_complete"/>
</trigger>
+ <trigger>
+ <rsc_op id="13" operation="monitor" operation_key="fencing_monitor_0" on_node="virt-3" on_node_uuid="3"/>
+ </trigger>
</inputs>
</synapse>
<synapse id="1">
@@ -28,7 +31,11 @@
<attributes CRM_meta_op_target_rc="7" CRM_meta_timeout="20000" />
</rsc_op>
</action_set>
- <inputs/>
+ <inputs>
+ <trigger>
+ <crm_event id="4" operation="stonith" operation_key="stonith-virt-3-on" on_node="virt-3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
</synapse>
<synapse id="2">
<action_set>
@@ -387,9 +394,6 @@
</action_set>
<inputs>
<trigger>
- <rsc_op id="13" operation="monitor" operation_key="fencing_monitor_0" on_node="virt-3" on_node_uuid="3"/>
- </trigger>
- <trigger>
<rsc_op id="14" operation="monitor" operation_key="dlm:2_monitor_0" on_node="virt-3" on_node_uuid="3"/>
</trigger>
<trigger>
diff --git a/pengine/test10/unfence-definition.summary b/pengine/test10/unfence-definition.summary
index c954c4b..3e4b66b 100644
--- a/pengine/test10/unfence-definition.summary
+++ b/pengine/test10/unfence-definition.summary
@@ -20,7 +20,6 @@ Transition Summary:
* Start clvmd:2 (virt-3)
Executing cluster transition:
- * Resource action: fencing monitor on virt-3
* Resource action: dlm monitor on virt-3
* Resource action: clvmd monitor on virt-2
* Resource action: clvmd monitor on virt-3
@@ -38,8 +37,9 @@ Executing cluster transition:
* Fencing virt-3 (on)
* Pseudo action: all_stopped
* Fencing virt-1 (on)
- * Resource action: fencing start on virt-1
+ * Resource action: fencing monitor on virt-3
* Pseudo action: dlm-clone_start_0
+ * Resource action: fencing start on virt-1
* Resource action: dlm start on virt-1
* Resource action: dlm start on virt-3
* Pseudo action: dlm-clone_running_0
diff --git a/pengine/test10/unfence-parameters.dot b/pengine/test10/unfence-parameters.dot
index e67eb5a..082bbe1 100644
--- a/pengine/test10/unfence-parameters.dot
+++ b/pengine/test10/unfence-parameters.dot
@@ -78,7 +78,7 @@ digraph "g" {
"dlm_stop_0 virt-2" -> "dlm_start_0 virt-2" [ style = bold]
"dlm_stop_0 virt-2" -> "dlm_stop_0 virt-1" [ style = bold]
"dlm_stop_0 virt-2" [ style=bold color="green" fontcolor="black"]
-"fencing_monitor_0 virt-3" -> "probe_complete virt-3" [ style = bold]
+"fencing_monitor_0 virt-3" -> "fencing_start_0 virt-1" [ style = bold]
"fencing_monitor_0 virt-3" [ style=bold color="green" fontcolor="black"]
"fencing_start_0 virt-1" [ style=bold color="green" fontcolor="black"]
"fencing_stop_0 virt-1" -> "all_stopped" [ style = bold]
@@ -111,6 +111,7 @@ digraph "g" {
"stonith 'on' virt-2" [ style=bold color="green" fontcolor="black"]
"stonith 'on' virt-3" -> "clvmd-clone_start_0" [ style = bold]
"stonith 'on' virt-3" -> "dlm-clone_start_0" [ style = bold]
+"stonith 'on' virt-3" -> "fencing_monitor_0 virt-3" [ style = bold]
"stonith 'on' virt-3" [ style=bold color="green" fontcolor="black"]
"stonith 'reboot' virt-4" -> "stonith_complete" [ style = bold]
"stonith 'reboot' virt-4" [ style=bold color="green" fontcolor="black"]
diff --git a/pengine/test10/unfence-parameters.exp b/pengine/test10/unfence-parameters.exp
index 491d78e..d3480f3 100644
--- a/pengine/test10/unfence-parameters.exp
+++ b/pengine/test10/unfence-parameters.exp
@@ -19,7 +19,11 @@
<attributes CRM_meta_op_target_rc="7" CRM_meta_timeout="20000" />
</rsc_op>
</action_set>
- <inputs/>
+ <inputs>
+ <trigger>
+ <crm_event id="4" operation="stonith" operation_key="stonith-virt-3-on" on_node="virt-3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
</synapse>
<synapse id="2">
<action_set>
@@ -36,6 +40,9 @@
<pseudo_event id="7" operation="probe_complete" operation_key="probe_complete"/>
</trigger>
<trigger>
+ <rsc_op id="12" operation="monitor" operation_key="fencing_monitor_0" on_node="virt-3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
<rsc_op id="15" operation="stop" operation_key="fencing_stop_0" on_node="virt-1" on_node_uuid="1"/>
</trigger>
</inputs>
@@ -433,9 +440,6 @@
</action_set>
<inputs>
<trigger>
- <rsc_op id="12" operation="monitor" operation_key="fencing_monitor_0" on_node="virt-3" on_node_uuid="3"/>
- </trigger>
- <trigger>
<rsc_op id="13" operation="monitor" operation_key="dlm:2_monitor_0" on_node="virt-3" on_node_uuid="3"/>
</trigger>
<trigger>
diff --git a/pengine/test10/unfence-parameters.summary b/pengine/test10/unfence-parameters.summary
index 17bbc62..5276cba 100644
--- a/pengine/test10/unfence-parameters.summary
+++ b/pengine/test10/unfence-parameters.summary
@@ -21,7 +21,6 @@ Transition Summary:
* Start clvmd:2 (virt-3)
Executing cluster transition:
- * Resource action: fencing monitor on virt-3
* Resource action: dlm monitor on virt-3
* Resource action: clvmd monitor on virt-2
* Resource action: clvmd monitor on virt-3
@@ -40,6 +39,7 @@ Executing cluster transition:
* Fencing virt-2 (on)
* Pseudo action: all_stopped
* Fencing virt-1 (on)
+ * Resource action: fencing monitor on virt-3
* Resource action: fencing start on virt-1
* Pseudo action: dlm-clone_start_0
* Resource action: dlm start on virt-1
diff --git a/pengine/test10/unfence-startup.dot b/pengine/test10/unfence-startup.dot
index a5cc606..4dbd273 100644
--- a/pengine/test10/unfence-startup.dot
+++ b/pengine/test10/unfence-startup.dot
@@ -26,7 +26,6 @@ digraph "g" {
"dlm:2_start_0 virt-3" -> "clvmd:2_start_0 virt-3" [ style = bold]
"dlm:2_start_0 virt-3" -> "dlm-clone_running_0" [ style = bold]
"dlm:2_start_0 virt-3" [ style=bold color="green" fontcolor="black"]
-"fencing_monitor_0 virt-3" -> "probe_complete virt-3" [ style = bold]
"fencing_monitor_0 virt-3" [ style=bold color="green" fontcolor="black"]
"probe_complete virt-1" -> "probe_complete" [ style = bold]
"probe_complete virt-1" [ style=bold color="green" fontcolor="black"]
@@ -40,6 +39,7 @@ digraph "g" {
"probe_complete" [ style=bold color="green" fontcolor="orange"]
"stonith 'on' virt-3" -> "clvmd-clone_start_0" [ style = bold]
"stonith 'on' virt-3" -> "dlm-clone_start_0" [ style = bold]
+"stonith 'on' virt-3" -> "fencing_monitor_0 virt-3" [ style = bold]
"stonith 'on' virt-3" [ style=bold color="green" fontcolor="black"]
"stonith 'reboot' virt-4" -> "stonith_complete" [ style = bold]
"stonith 'reboot' virt-4" [ style=bold color="green" fontcolor="black"]
diff --git a/pengine/test10/unfence-startup.exp b/pengine/test10/unfence-startup.exp
index 8a04d54..7c55d2c 100644
--- a/pengine/test10/unfence-startup.exp
+++ b/pengine/test10/unfence-startup.exp
@@ -6,7 +6,11 @@
<attributes CRM_meta_op_target_rc="7" CRM_meta_timeout="20000" />
</rsc_op>
</action_set>
- <inputs/>
+ <inputs>
+ <trigger>
+ <crm_event id="4" operation="stonith" operation_key="stonith-virt-3-on" on_node="virt-3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
</synapse>
<synapse id="1">
<action_set>
@@ -186,9 +190,6 @@
</action_set>
<inputs>
<trigger>
- <rsc_op id="11" operation="monitor" operation_key="fencing_monitor_0" on_node="virt-3" on_node_uuid="3"/>
- </trigger>
- <trigger>
<rsc_op id="12" operation="monitor" operation_key="dlm:2_monitor_0" on_node="virt-3" on_node_uuid="3"/>
</trigger>
<trigger>
diff --git a/pengine/test10/unfence-startup.summary b/pengine/test10/unfence-startup.summary
new file mode 100644
index 0000000..a03fa15
--- /dev/null
+++ b/pengine/test10/unfence-startup.summary
@@ -0,0 +1,48 @@
+
+Current cluster status:
+Node virt-4 (4): UNCLEAN (offline)
+Online: [ virt-1 virt-2 virt-3 ]
+
+ fencing (stonith:fence_scsi): Started virt-1
+ Clone Set: dlm-clone [dlm]
+ Started: [ virt-1 virt-2 ]
+ Stopped: [ virt-3 virt-4 ]
+ Clone Set: clvmd-clone [clvmd]
+ Started: [ virt-1 ]
+ Stopped: [ virt-2 virt-3 virt-4 ]
+
+Transition Summary:
+ * Start dlm:2 (virt-3)
+ * Start clvmd:1 (virt-2)
+ * Start clvmd:2 (virt-3)
+
+Executing cluster transition:
+ * Resource action: dlm monitor on virt-3
+ * Resource action: clvmd monitor on virt-2
+ * Resource action: clvmd monitor on virt-3
+ * Fencing virt-4 (reboot)
+ * Pseudo action: stonith_complete
+ * Pseudo action: probe_complete
+ * Fencing virt-3 (on)
+ * Pseudo action: all_stopped
+ * Resource action: fencing monitor on virt-3
+ * Pseudo action: dlm-clone_start_0
+ * Resource action: dlm start on virt-3
+ * Pseudo action: dlm-clone_running_0
+ * Pseudo action: clvmd-clone_start_0
+ * Resource action: clvmd start on virt-2
+ * Resource action: clvmd start on virt-3
+ * Pseudo action: clvmd-clone_running_0
+
+Revised cluster status:
+Online: [ virt-1 virt-2 virt-3 ]
+OFFLINE: [ virt-4 ]
+
+ fencing (stonith:fence_scsi): Started virt-1
+ Clone Set: dlm-clone [dlm]
+ Started: [ virt-1 virt-2 virt-3 ]
+ Stopped: [ virt-4 ]
+ Clone Set: clvmd-clone [clvmd]
+ Started: [ virt-1 virt-2 virt-3 ]
+ Stopped: [ virt-4 ]
+