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

123
state.dot
View File

@ -1,62 +1,93 @@
strict digraph state {
started
[label="BFFH just started"];
rank = 0
subgraph "cluster_internal_state" {
rank = 1
ctr = applied
start
[shape=doublecircle, label="BFFH"]
created
[label="Machine was newly created"];
[label="Machine object created"];
start -> created;
fresh
[label="State is fresh"];
created -> attach
[label="New state or loaded from disk"];
started -> fresh;
created -> fresh;
attach
[label="Attach actor", shape=box];
unapplied
[label="Stored but not applied"];
[label="Unapplied"];
applied
[label="All actors are done"];
[label="Applied"];
verified
[label="State was verified"];
[label="Verified"];
fresh -> unapplied
[label="statechange received"];
unapplied -> applied
[label="All actors have finished processing"];
applied -> verified
[label="All actors have verified that the state change happened in real life too"];
wait_apply
[label="Wait ∀ Actors", shape=box]
wait_verify
[label="Wait ∀ Actors", shape=box]
unapplied -> wait_apply -> applied;
applied -> wait_verify -> verified;
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"];
actor_applied
[label="statechange processed"];
actor_verified
[label="Measured real world and it matches the statechange"];
verified -> unapplied
[label="statechange received"];
unapplied -> unapplied
[label="statechange received"];
actor_fresh -> actor_attached
[label="Initial state received"];
actor_attached -> actor_applied
[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 -> attach -> unapplied;
applied -> attach -> unapplied;
verified -> attach -> unapplied;
}
unapplied -> actor_unapplied
[label="send statechange to actor"];
actor_applied -> applied
[label="actor processed statechange"];
actor_verified -> verified
[label="actor verifies statechange"];
subgraph "cluster_actor" {
rank = 1
center = actor_applied
actor_start
[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];
}