State machine demo

This graph was generated from a coyote test with the --xml-trace and --actor-graph options on a StateMachine based coyote application that implements the Raft protocol. The fact that coyote StateMachines expose explicit state information makes it possible for coyote to visualize what is going on in a level of detail that is hard to extract from other kinds of C# code. This illustrates the benefit of this programming model both for software design, as well as implementation enforcing this design, and testing that can find very hard to find bugs in these kinds of complex distributed systems.

The trace shows a global order of messages being transferred between the various state machines. The message exchange is shown to happen one after the other (when in production they may be happening in parallel). This makes it easy to understand the trace. This trace, in fact, demonstrates a bug where two Raft Server state-machines both end up claiming to be leaders at the same time which is a violation of Raft’s consensus requirements that there be at most one leader at a time.

This animation is slowed down from actual testing speed so you can see what is happening. This entire test normally takes milliseconds so that Coyote can explore a huge number of possible tests in a short amount of time.