commit e0bcac68df1f684c1879ddb76387c47b177ece6f Author: Andrew Beekhof 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 " [ style = dashed] -"container1_delete_0 18node1" [ style=bold color="green" fontcolor="black"] -"container1_delete_0 18node2" -> "container1_start_0 " [ style = dashed] -"container1_delete_0 18node2" [ style=bold color="green" fontcolor="black"] -"container1_delete_0 18node3" -> "container1_start_0 " [ style = dashed] -"container1_delete_0 18node3" [ style=bold color="green" fontcolor="black"] -"container1_start_0 " [ 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 " [ 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"] -}