This commit is contained in:
Nadja Reitzenstein 2021-09-21 20:17:12 +02:00
parent c5f72d9508
commit 75f8911c1f

123
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"];
verified -> unapplied
[label="State was changed or a new actor was attached"];
subgraph "actor" {
actor_fresh
[label="Actor was just constructed"];
actor_attached
[label="Actor was just attached to a machine"];
actor_unapplied
[label="statechange received"]; [label="statechange received"];
actor_applied verified -> unapplied
[label="statechange processed"]; [label="statechange received"];
actor_verified unapplied -> unapplied
[label="Measured real world and it matches the statechange"]; [label="statechange received"];
actor_fresh -> actor_attached unapplied -> attach -> unapplied;
[label="Initial state received"]; applied -> attach -> unapplied;
actor_attached -> actor_applied verified -> attach -> unapplied;
[label="Initial state applied (potentially noop)"];
actor_attached -> actor_unapplied
[label="statechange received before finishing initial application"];
actor_unapplied -> actor_applied
[label="processed statechange"];
actor_applied -> actor_verified
[label="measure"];
} }
unapplied -> actor_unapplied
[label="send statechange to actor"]; subgraph "cluster_actor" {
actor_applied -> applied rank = 1
[label="actor processed statechange"]; center = actor_applied
actor_verified -> verified actor_start
[label="actor verifies statechange"]; [shape=doublecircle, label="Actor"];
actor_fresh
[label="Actor was just constructed"];
actor_start -> actor_fresh;
actor_attached
[label="Attached"];
actor_unapplied
[label="Unapplied"];
actor_applied
[label="Applied"];
actor_verified
[label="Verified"];
wait_initial
[label="Recv", shape=box];
wait_state
[label="Recv", shape=box];
actor_fresh -> wait_initial -> actor_attached;
actor_attached -> actor_applied
[label="initialize/apply"];
actor_unapplied -> actor_applied
[label="apply"];
actor_applied -> actor_verified
[label="verify"];
actor_unapplied -> wait_state;
actor_applied -> wait_state;
actor_verified -> wait_state;
wait_state -> actor_unapplied;
}
attach -> wait_initial
[label="Send initial state to that actor", style=dotted]
unapplied -> wait_state
[label="Send new state to all actors", style=dotted];
actor_applied -> wait_apply
[label="Confirm apply", style=dotted];
actor_verified -> wait_verify
[label="Confirm verify", style=dotted];
} }