commit e0bcac68df1f684c1879ddb76387c47b177ece6f
Author: Andrew Beekhof <andrew@beekhof.net>
Date: Tue Feb 18 10:37:07 2014 +1100
Fix: crmd: Do not overwrite existing node state when fencing completes
Let the normal membership callbacks do that. This allows us to function
correctly when a node returns before we get the fencing notification.
(cherry picked from commit e777b1759786d0a917299399e8a1fee1242a1eef)
Conflicts:
crmd/callbacks.c
crmd/te_utils.c
crmd/utils.c
diff --git a/crmd/crmd_utils.h b/crmd/crmd_utils.h
index 92d14b1..ca1e177 100644
--- a/crmd/crmd_utils.h
+++ b/crmd/crmd_utils.h
@@ -99,6 +99,7 @@ void crmd_join_phase_log(int level);
const char *get_timer_desc(fsa_timer_t * timer);
gboolean too_many_st_failures(void);
void st_fail_count_reset(const char * target);
+void crmd_peer_down(crm_node_t *peer, bool full);
# define fsa_register_cib_callback(id, flag, data, fn) do { \
fsa_cib_conn->cmds->register_callback( \
diff --git a/crmd/te_actions.c b/crmd/te_actions.c
index 4e3bc22..ee66af6 100644
--- a/crmd/te_actions.c
+++ b/crmd/te_actions.c
@@ -75,11 +75,8 @@ send_stonith_update(crm_action_t * action, const char *target, const char *uuid)
crm_info("Recording uuid '%s' for node '%s'", uuid, target);
peer->uuid = strdup(uuid);
}
- crm_update_peer_proc(__FUNCTION__, peer, crm_proc_none, NULL);
- crm_update_peer_state(__FUNCTION__, peer, CRM_NODE_LOST, 0);
- crm_update_peer_expected(__FUNCTION__, peer, CRMD_JOINSTATE_DOWN);
- crm_update_peer_join(__FUNCTION__, peer, crm_join_none);
+ crmd_peer_down(peer, TRUE);
node_state =
do_update_node_cib(peer,
node_update_cluster | node_update_peer | node_update_join |
diff --git a/crmd/te_utils.c b/crmd/te_utils.c
index c7260fd..9edb128 100644
--- a/crmd/te_utils.c
+++ b/crmd/te_utils.c
@@ -234,11 +234,7 @@ tengine_stonith_notify(stonith_t * st, stonith_event_t * st_event)
}
- /* Everyone records them as safely down */
- crm_update_peer_proc(__FUNCTION__, peer, crm_proc_none, NULL);
- crm_update_peer_state(__FUNCTION__, peer, CRM_NODE_LOST, 0);
- crm_update_peer_expected(__FUNCTION__, peer, CRMD_JOINSTATE_DOWN);
- crm_update_peer_join(__FUNCTION__, peer, crm_join_none);
+ crmd_peer_down(peer, TRUE);
}
}
diff --git a/crmd/utils.c b/crmd/utils.c
index 07c71b2..a8516c4 100644
--- a/crmd/utils.c
+++ b/crmd/utils.c
@@ -1091,3 +1091,13 @@ update_attrd(const char *host, const char *name, const char *value, const char *
}
}
}
+
+void crmd_peer_down(crm_node_t *peer, bool full)
+{
+ if(full && peer->state == NULL) {
+ crm_update_peer_state(__FUNCTION__, peer, CRM_NODE_LOST, 0);
+ crm_update_peer_proc(__FUNCTION__, peer, crm_proc_none, NULL);
+ }
+ crm_update_peer_join(__FUNCTION__, peer, crm_join_none);
+ crm_update_peer_expected(__FUNCTION__, peer, CRMD_JOINSTATE_DOWN);
+}
diff --git a/pengine/test10/whitebox-orphan-ms.pe.dot b/pengine/test10/whitebox-orphan-ms.pe.dot
deleted file mode 100644
index 81c37eb..0000000
--- a/pengine/test10/whitebox-orphan-ms.pe.dot
+++ /dev/null
@@ -1,69 +0,0 @@
-digraph "g" {
-"FencingFail_start_0 18node1" [ style=bold color="green" fontcolor="black"]
-"FencingFail_stop_0 18node3" -> "FencingFail_start_0 18node1" [ style = bold]
-"FencingFail_stop_0 18node3" -> "all_stopped" [ style = bold]
-"FencingFail_stop_0 18node3" [ style=bold color="green" fontcolor="black"]
-"all_stopped" [ style=bold color="green" fontcolor="orange"]
-"container1_delete_0 18node1" -> "container1_start_0 <none>" [ style = dashed]
-"container1_delete_0 18node1" [ style=bold color="green" fontcolor="black"]
-"container1_delete_0 18node2" -> "container1_start_0 <none>" [ style = dashed]
-"container1_delete_0 18node2" [ style=bold color="green" fontcolor="black"]
-"container1_delete_0 18node3" -> "container1_start_0 <none>" [ style = dashed]
-"container1_delete_0 18node3" [ style=bold color="green" fontcolor="black"]
-"container1_start_0 <none>" [ style=dashed color="red" fontcolor="black"]
-"container1_stop_0 18node1" -> "all_stopped" [ style = bold]
-"container1_stop_0 18node1" -> "container1_delete_0 18node1" [ style = bold]
-"container1_stop_0 18node1" -> "container1_delete_0 18node2" [ style = bold]
-"container1_stop_0 18node1" -> "container1_delete_0 18node3" [ style = bold]
-"container1_stop_0 18node1" -> "container1_start_0 <none>" [ style = dashed]
-"container1_stop_0 18node1" [ style=bold color="green" fontcolor="black"]
-"container2_delete_0 18node1" [ style=bold color="green" fontcolor="black"]
-"container2_delete_0 18node2" [ style=bold color="green" fontcolor="black"]
-"container2_delete_0 18node3" [ style=bold color="green" fontcolor="black"]
-"container2_stop_0 18node1" -> "all_stopped" [ style = bold]
-"container2_stop_0 18node1" -> "container2_delete_0 18node1" [ style = bold]
-"container2_stop_0 18node1" -> "container2_delete_0 18node2" [ style = bold]
-"container2_stop_0 18node1" -> "container2_delete_0 18node3" [ style = bold]
-"container2_stop_0 18node1" [ style=bold color="green" fontcolor="black"]
-"lxc-ms_delete_0 18node1" [ style=bold color="green" fontcolor="black"]
-"lxc-ms_delete_0 18node2" [ style=bold color="green" fontcolor="black"]
-"lxc-ms_delete_0 18node3" [ style=bold color="green" fontcolor="black"]
-"lxc-ms_demote_0 lxc1" -> "lxc-ms_stop_0 lxc1" [ style = bold]
-"lxc-ms_demote_0 lxc1" -> "lxc-ms_stop_0 lxc2" [ style = bold]
-"lxc-ms_demote_0 lxc1" -> "lxc1_stop_0 18node1" [ style = bold]
-"lxc-ms_demote_0 lxc1" [ style=bold color="green" fontcolor="black"]
-"lxc-ms_demote_0 lxc2" -> "lxc-ms_stop_0 lxc1" [ style = bold]
-"lxc-ms_demote_0 lxc2" -> "lxc-ms_stop_0 lxc2" [ style = bold]
-"lxc-ms_demote_0 lxc2" -> "lxc2_stop_0 18node1" [ style = bold]
-"lxc-ms_demote_0 lxc2" [ style=bold color="green" fontcolor="black"]
-"lxc-ms_stop_0 lxc1" -> "all_stopped" [ style = bold]
-"lxc-ms_stop_0 lxc1" -> "lxc-ms_delete_0 18node1" [ style = bold]
-"lxc-ms_stop_0 lxc1" -> "lxc-ms_delete_0 18node2" [ style = bold]
-"lxc-ms_stop_0 lxc1" -> "lxc-ms_delete_0 18node3" [ style = bold]
-"lxc-ms_stop_0 lxc1" -> "lxc1_stop_0 18node1" [ style = bold]
-"lxc-ms_stop_0 lxc1" [ style=bold color="green" fontcolor="black"]
-"lxc-ms_stop_0 lxc2" -> "all_stopped" [ style = bold]
-"lxc-ms_stop_0 lxc2" -> "lxc-ms_delete_0 18node1" [ style = bold]
-"lxc-ms_stop_0 lxc2" -> "lxc-ms_delete_0 18node2" [ style = bold]
-"lxc-ms_stop_0 lxc2" -> "lxc-ms_delete_0 18node3" [ style = bold]
-"lxc-ms_stop_0 lxc2" -> "lxc2_stop_0 18node1" [ style = bold]
-"lxc-ms_stop_0 lxc2" [ style=bold color="green" fontcolor="black"]
-"lxc1_delete_0 18node1" [ style=bold color="green" fontcolor="black"]
-"lxc1_delete_0 18node2" [ style=bold color="green" fontcolor="black"]
-"lxc1_delete_0 18node3" [ style=bold color="green" fontcolor="black"]
-"lxc1_stop_0 18node1" -> "all_stopped" [ style = bold]
-"lxc1_stop_0 18node1" -> "container1_stop_0 18node1" [ style = bold]
-"lxc1_stop_0 18node1" -> "lxc1_delete_0 18node1" [ style = bold]
-"lxc1_stop_0 18node1" -> "lxc1_delete_0 18node2" [ style = bold]
-"lxc1_stop_0 18node1" -> "lxc1_delete_0 18node3" [ style = bold]
-"lxc1_stop_0 18node1" [ style=bold color="green" fontcolor="black"]
-"lxc2_delete_0 18node1" [ style=bold color="green" fontcolor="black"]
-"lxc2_delete_0 18node2" [ style=bold color="green" fontcolor="black"]
-"lxc2_delete_0 18node3" [ style=bold color="green" fontcolor="black"]
-"lxc2_stop_0 18node1" -> "all_stopped" [ style = bold]
-"lxc2_stop_0 18node1" -> "container2_stop_0 18node1" [ style = bold]
-"lxc2_stop_0 18node1" -> "lxc2_delete_0 18node1" [ style = bold]
-"lxc2_stop_0 18node1" -> "lxc2_delete_0 18node2" [ style = bold]
-"lxc2_stop_0 18node1" -> "lxc2_delete_0 18node3" [ style = bold]
-"lxc2_stop_0 18node1" [ style=bold color="green" fontcolor="black"]
-}