Blob Blame History Raw
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"]
-}