This commit is contained in:
Nadja Reitzenstein 2021-09-21 20:17:12 +02:00
parent ba73fe80c5
commit 6d93e778fd

103
state.dot
View File

@ -1,62 +1,93 @@
strict digraph state { strict digraph state {
started rank = 0
[label="BFFH just started"]; subgraph "cluster_internal_state" {
rank = 1
ctr = applied
start
[shape=doublecircle, label="BFFH"]
created created
[label="Machine was newly created"]; [label="Machine object created"];
start -> created;
fresh created -> attach
[label="State is fresh"]; [label="New state or loaded from disk"];
started -> fresh; attach
created -> fresh; [label="Attach actor", shape=box];
unapplied unapplied
[label="Stored but not applied"]; [label="Unapplied"];
applied applied
[label="All actors are done"]; [label="Applied"];
verified verified
[label="State was verified"]; [label="Verified"];
fresh -> unapplied wait_apply
[label="statechange received"]; [label="Wait ∀ Actors", shape=box]
unapplied -> applied wait_verify
[label="All actors have finished processing"]; [label="Wait ∀ Actors", shape=box]
applied -> verified
[label="All actors have verified that the state change happened in real life too"]; unapplied -> wait_apply -> applied;
applied -> wait_verify -> verified;
applied -> unapplied applied -> unapplied
[label="State was changed or a new actor was attached"]; [label="statechange received"];
verified -> unapplied verified -> unapplied
[label="State was changed or a new actor was attached"]; [label="statechange received"];
unapplied -> unapplied
[label="statechange received"];
subgraph "actor" { unapplied -> attach -> unapplied;
applied -> attach -> unapplied;
verified -> attach -> unapplied;
}
subgraph "cluster_actor" {
rank = 1
center = actor_applied
actor_start
[shape=doublecircle, label="Actor"];
actor_fresh actor_fresh
[label="Actor was just constructed"]; [label="Actor was just constructed"];
actor_start -> actor_fresh;
actor_attached actor_attached
[label="Actor was just attached to a machine"]; [label="Attached"];
actor_unapplied actor_unapplied
[label="statechange received"]; [label="Unapplied"];
actor_applied actor_applied
[label="statechange processed"]; [label="Applied"];
actor_verified actor_verified
[label="Measured real world and it matches the statechange"]; [label="Verified"];
wait_initial
[label="Recv", shape=box];
wait_state
[label="Recv", shape=box];
actor_fresh -> wait_initial -> actor_attached;
actor_fresh -> actor_attached
[label="Initial state received"];
actor_attached -> actor_applied actor_attached -> actor_applied
[label="Initial state applied (potentially noop)"]; [label="initialize/apply"];
actor_attached -> actor_unapplied
[label="statechange received before finishing initial application"];
actor_unapplied -> actor_applied actor_unapplied -> actor_applied
[label="processed statechange"]; [label="apply"];
actor_applied -> actor_verified actor_applied -> actor_verified
[label="measure"]; [label="verify"];
actor_unapplied -> wait_state;
actor_applied -> wait_state;
actor_verified -> wait_state;
wait_state -> actor_unapplied;
} }
unapplied -> actor_unapplied attach -> wait_initial
[label="send statechange to actor"]; [label="Send initial state to that actor", style=dotted]
actor_applied -> applied unapplied -> wait_state
[label="actor processed statechange"]; [label="Send new state to all actors", style=dotted];
actor_verified -> verified actor_applied -> wait_apply
[label="actor verifies statechange"]; [label="Confirm apply", style=dotted];
actor_verified -> wait_verify
[label="Confirm verify", style=dotted];
} }