Cause: When a node leaves the cluster normally it sends a message to other nodes that set its state to LEAVING. It is only when the node actually disappears from openais that the state is set to DOWN.
Consequence: If the node is restarted quickly then the node UP message arrives before the expected node down message (which gets cancelled). But cman only looks for DOWN nodes when marking nodes as back up again. So the node appears to stay DOWN.
Fix: The check for a node transition to the UP state now also checks for nodes in LEAVING as well as DOWN states.
Result: Quickly restarting a node using cman_tool leave; cman_tool join correctly updates the node state in cman.